阻塞queue系列之ArrayBlockingQueue
来源:互联网 发布:福州广电网络 编辑:程序博客网 时间:2024/05/01 23:56
extends AbstractQueueimplements BlockingQueue, java.io.Serializable一个由数组支持的有界阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序。队列的头部 是在队列中存在时间最长的元素。队列的尾部 是在队列中存在时间最短的元素。新元素插入到队列的尾部,队列检索操作则是从队列头部开始获得元素。添加和删除使用的是同一把锁ReentrantLock。造成在存取两种操作时会竞争同一把锁,而使得性能相对低下。
特点
- 有界
- FIFO(先进先出)
- Once created, the capacity cannot be changed.
构造方法
public ArrayBlockingQueue(int capacity) { this(capacity, false); }
public ArrayBlockingQueue(int capacity, boolean fair) { if (capacity <= 0) throw new IllegalArgumentException(); this.items = new Object[capacity]; lock = new ReentrantLock(fair); notEmpty = lock.newCondition(); notFull = lock.newCondition(); }
从源码可以看出ArrayBlockingQueue的是否公平,实际是ReentrantLock的公平。
常用方法
- offer 添加元素
从源码可以看出,返回类型boolean,如果容量达到满值,则无法插入,返回false.
- add 添加元素
add方法其实调用就是offer方法,只是当offer方法返回false后,会抛出IllegalStateException(“Queue full”)异常。
- put 添加元素
与上述方法不同的是,该方法会阻塞,直到有空间可以插入元素。
- poll 取元素
取第一个元素,并且删除。
- peek 取元素
取第一个元素,不会删除
- take 取元素
若没有元素会一直阻塞,再到有元素存入。
drainTo(Collection<? super E> c)
排干
把queue的元素全部移到了list集合中。
阅读全文
0 0
- 阻塞queue系列之ArrayBlockingQueue
- 阻塞queue系列之LinkedBlockingQueue
- 阻塞queue系列之LinkedBlockingDeque
- 阻塞queue系列之PriorityBlockingQueue
- 阻塞queue系列之DelayQueue
- 阻塞queue系列之LinkedTransferQueue
- 阻塞queue系列之SynchronousQueue
- 阻塞队列之ArrayBlockingQueue
- 阻塞队列之ArrayBlockingQueue
- JAVA阻塞队列之ArrayBlockingQueue
- 多线程之阻塞队列ArrayBlockingQueue,BlockingQueue
- 集合框架 Queue---ArrayBlockingQueue
- 多线程之间的交互:阻塞队列之ArrayBlockingQueue
- 深入剖析java并发之阻塞队列LinkedBlockingQueue与ArrayBlockingQueue
- Java 并发 --- 阻塞队列之ArrayBlockingQueue源码分析
- 阻塞队列使用---ArrayBlockingQueue
- JAVA 阻塞队列 ArrayBlockingQueue
- 阻塞队列ArrayBlockingQueue说明
- 第十六周LeetCode
- (二)tomcat服务器配置虚拟主机
- Tip:MySQL数据库中关于数据表ID重置
- Linux 下分析Java程序CPU使用高的问题
- SCRAPY_part2_基础TIPS
- 阻塞queue系列之ArrayBlockingQueue
- Win7(64)+eclipse(64)+tomcat7(64)+jdk7(64)开发环境配置
- 171220
- 【BZOJ1010】玩具装箱
- MATLAB实现RSA算法
- Junit简单使用方法
- Presto-[7]-Presto Security
- 蒂高卫浴-数夫F19家具ERP项目是送给企业10周年庆最好的礼物
- Java7的Zip工具类:Zip File System Provider