BlockingQueue阻塞队列

21 篇文章 0 订阅

BlockingQueue阻塞队列:顾名思义起到阻塞的作用,将生产者和消费者隔离起来,提高安全性。
ArrayBlockingQueue:以数组的形式存放这任务,容量有限,但是空间占用相对较小,使用时必须指定长度。不支持扩容,入队和出列都是从队首开始,是先进先出的队列,入队和出列使用的是同一个锁,性能不是很高。
LinkedBlockingQueue:无界的队列,但实际上是有界的队列,容量最大为Integer.MAX_VALUE,一般使用时需要指定长度,任务超出这个数量,会报OOM异常。单链表形式存放着任务,队首出列,队尾入队,出列和入队使用的是两把锁,所以性能较高。
PriorityBlockingQueue:拥有优先级的数组队列,正常是优先级最高的先出列,当然可以根据实际业务的情况来设计谁最先出列。数组的默认长度是11,支持无限扩容。
使用场景:
双十一活动,抢购商品,会员先抢到
银行办理业务,会员先办理
DelayQueue:延迟队列,可以预设一段时间来执行相对应的任务。内部采用优先队列 PriorityQueue 存储元素,不是先进先出,而是会按照延迟时间的长短来排序,下一个即将执行的任务会排到队列的最前面。
使用场景:
订单30分钟超时
业务办理成功后,5分钟内给用户发短信
任务超时的处理
SynchronousQueue:容量为0的阻塞队列,生产者线程对其的插入操作put必须等待消费者的移除操作take。性能很高。它的容量为 0,所以没有一个地方来暂存元素,导致每次取数据都要先阻塞,直到有数据被放入;同理,每次放数据的时候也会阻塞,直到有消费者来取。
使用场景:
Executors.newCachedThreadPool()就使用了SynchronousQueue。传递性的工作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值