java concurent之BlockingQueue

从名字上看,BlockingQueue是阻塞队列的意思
这个队列主要提供下面的功能:
阻塞队列提供了可阻塞的take和put方法,另外可定时的poll和offer实际原理也是一样的。
如果BlockingQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状态,直到BlockingQueue进了东西才会被唤醒,同样,如果BlockingQueue是满的,任何试图往里存东西的操作也会被阻断进入等待状态,直到BlockingQueue里有空间时才会被唤醒继续操作。
阻塞队列有一般分为两类 无限阻塞队列和有限阻塞队列。有限阻塞队列中,当队列满时,调用put方法将会阻塞;而无限阻塞队列中,put方法是不会阻塞的。
很显然这个队列的一种最常用的场景就是 生产者-消费者 模式
它有以下具体实现类:
ArrayBlockingQueue:采用数组作为存储队列的阻塞队列,这个队列采用FIFO的方式管理数据
LinkedBlockingQueue:采用链式结构作为存储队列,同样它也采用FIFO的方式管理数据
PriorityBlockingQueue:采用基于优先级堆的极大优先级队列作为存储队列。
SynchronousQueue:特殊的BlockingQueue,其中每个 put 必须等待一个 take,反之亦然。
DelayQueue:这是一个无限阻塞队列,只有在延迟期满时才能从中提取元素。该队列的头部是延迟期满后保存时间最长的 Delayed 元素。如果延迟都还没有期满,则队列没有头部。
通过查看源代码可以看到这个类内部是采用PriorityQueue作为存储队列

DelayQueue的一些常用的场景
a) 关闭空闲连接。服务器中,有很多客户端的连接,空闲一段时间之后需要关闭之。
b) 缓存。缓存中的对象,超过了空闲时间,需要从缓存中移出。
c) 任务超时处理。在网络协议滑动窗口请求应答式交互时,处理超时未响应的请求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值