阻塞队列BlockingQueue

[size=large][align=center]阻塞队列BlockingQueue[/align][/size]
转载自:[url]https://www.jianshu.com/p/f2791bbaf348[/url]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值