您的位置:首页 > 产品设计 > UI/UE

Java常见集合框架(十七):Queue总结

2017-10-19 15:40 393 查看

BlockingQueue

BlockingQueue相比Queue多了两个阻塞操作:put、take。

不允许使用NUL元素。

主要用于生产者-使用者队列。

BlockingQueue 利用ReentrantLock实现线程安全、利用Condition实现阻塞。

所有队列实现BlockingQueue,故都拥有以上特性。

BlockingQueue 方法以四种形式出现。



ArrayBlockingQueue

一个由数组结构组成的有界阻塞队列。

队列按 FIFO(先进先出)原则对元素进行排序。

容量构造实例时指定,不允许扩容。

LinkedBlockingQueue

一个由链表结构组成的有界阻塞队列。

队列按 FIFO(先进先出)排序元素。

容量固定,默认值Integer.MAX_VALUE ,不允许扩容。

链接队列的吞吐量通常要高于基于数组的队列,但是在大多数并发应用程序中,其可预知的性能要低。

利用两个锁ReentrantLock(takeLock、putLock)、两个Condition(notEmpty、notFull)进行读写分离,提高效率,利用Node构成链表式队列。

DelayQueue

一个使用优先级队列实现的无界阻塞队列。

具有延迟功能。

基于PriorityQueue。

虽说无界,但PriorityQueue是数组结构形式存储,故最大为Integer.MAX_VALUE。

PriorityBlockingQueue

一个支持优先级排序的无界阻塞队列。

同样基于PriorityQueue。

无界的说法也同上。

PriorityQueue

一个基于优先级堆的无界优先级队列。

非同步。

优先级队列不允许使用 null 元素。

元素以数组结构形式存储,故最大值为Integer.MAX_VALUE。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: