zoukankan      html  css  js  c++  java
  • ArrayBlockingQueue

    我们先来熟悉一下 ArrayBlockingQueue 中的几个重要的方法。

    • add(E e):把 e 加到 BlockingQueue 里,即如果 BlockingQueue 可以容纳,则返回 true,否则报异常 
    • offer(E e):表示如果可能的话,将 e 加到 BlockingQueue 里,即如果 BlockingQueue 可以容纳,则返回 true,否则返回 false 
    • offer(E e, long timeout, TimeUnit unit) 表示如果可能的话,将 e 加到 BlockingQueue 里,即如果 BlockingQueue 可以容纳,则返回 true,否则(持续等待阻塞一段时间后,看能否添加进去成功返回true失败返回false)返回 false 
    • put(E e):把 e 加到 BlockingQueue 里,如果 BlockQueue 没有空间,则调用此方法的线程被阻断直到 BlockingQueue 里面有空间再继续
    • poll(time):取走 BlockingQueue 里排在首位的对象,若不能立即取出,则可以等 time 参数规定的时间,取不到时返回 null 
    • take():取走 BlockingQueue 里排在首位的对象,若 BlockingQueue 为空,阻断进入等待状态直到 Blocking 有新的对象被加入为止 
    • remainingCapacity():剩余可用的大小。等于初始容量减去当前的 size

    我们再来看一下 ArrayBlockingQueue 使用场景。

    • 先进先出队列(队列头的是最先进队的元素;队列尾的是最后进队的元素)
    • 有界队列(即初始化时指定的容量,就是队列最大的容量,不会出现扩容,容量满,则阻塞进队操作;容量空,则阻塞出队操作)
    • 队列不支持空元素.

    看一下源码

      重要的属性

     重要的方法

    构造方法,ArrayBlockingQueue是一个用数组实现的环形队列,在构造方法中,会要求传入数组的容量。

     其put/take方法也很简单,如下所示。

     put方法

     

     take方法

    以上内容皆取自jdk8.

  • 相关阅读:
    【BZOJ1067】【SCOI2007】降雨量(线段树)
    【BZOJ3489】A simple rmq problem(树套树)
    【BZOJ1146】【CTSC2008】网络管理
    【BZOJ3236】【Ahoi2013】作业
    计算几何的一些板
    【BZOJ3173】【Tjoi2013】最长上升子序列(树状数组)
    解决phpmyadmin导入长脚本超时
    make报错make: *** [sapi/cli/php] Error 1
    wampserver配置redis在phpinfo()里面找不到
    阿里云服务器安装Apache环境外网不能访问
  • 原文地址:https://www.cnblogs.com/fuqiang-zhou/p/15026292.html
Copyright © 2011-2022 走看看