`

阻塞队列BlockingQueue

阅读更多
阻塞队列BlockingQueue

转载自:https://www.jianshu.com/p/f2791bbaf348

阻塞队列(BlockingQueue)的概念:
        当队列中为空时,从队列中获取元素的操作将被阻塞,当队列满时,向队列中添加元素的操作将被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其它的线程往队列中插入新的元素。同样,试图往满的队列中添加新元素的线程也会被阻塞,直到有其他的线程使队列重新变的空闲起来。(类似于生产者和消费者模式)
注:主要针对多线程并发时存在。

java.util.concurrent包下BlockingQueue的实现类:
1:ArrayBlockingQueue:一个由数组结构组成的有界队列。此队列按照先进先出的顺序进行排序。支持公平锁和非公平锁。
2:LinkedBlockingQueue:一个由链表(单向链表)结构组成的有界队列,此队列的长度为Integer.MAX_VALUE。此队列按照先进先出的顺序进行排序。
3:PriorityBlockingQueue:一个支持线程优先级排序的无界队列,默认自然序进行排序,也可以自定义实现compareTo()方法来指定元素排序规则,不能保证同优先级元素的顺序。
4:DelayQueue:一个实现PriorityBlockingQueue实现延迟获取的无界队列,在创建元素时,可以指定多久才能从队列中获取当前元素。只有延时期满后才能从队列中获取元素。
5:SynchronousQueue:一个不存储元素的阻塞队列,每一个put操作必须等待take操作,否则不能添加元素。支持公平锁和非公平锁。(元素不会存储的队列,相当于没有中间商)
6:LinkedBlockingDeque: 一个由链表结构组成的双向阻塞队列(双向链表)。队列头部和尾部都可以添加和移除元素,多线程并发时,可以将锁的竞争最多降到一半。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics