java集合之BlockingQueue

在这里插入图片描述
在这里插入图片描述

BlockingQueue是concurrent中的阻塞队列,为多线程传输数据提供了方便,使用者不需要去实现线程之间的协调
什么是阻塞队列,首先它是一个队列(或者说集合),它是用来存放数据的,为什么说阻塞,当多个线程往队列里面放数据或取数据的时候,如果没有先来后到,乱取乱放,数据就脏了,所以我们需要协调多个线程之间的取和放,BlockingQueue就是实现了协调多线程功能的一个队列,使用者不再关心什么时候线程该阻塞,什么时候线程该唤醒,BlockingQueue已经包办这一切。
官方介绍:
A Queue that additionally supports operations that wait for the queue to become non-empty when retrieving an element, and wait for space to become available in the queue when storing an element.
(BlockingQueue是一个支持当获取数据的时候,如果队列里面没有数据则等待队列非空的时候再返回,当存放元素的时候,如果没有可用空间则等待队列可用时再存放)

BlockingQueue的方法有四种形式,有的操作在当前可能无法立即满足,但可能在未来某个时刻满足,分别如下:1、不能满足则抛出异常 2、不能满足则返回一个特殊值或者false 3、无限期阻塞当前线程直到操作成功 4、在给定的时间范围内等待,如果超时不能满足则放弃
在这里插入图片描述
此外,无法向一个 BlockingQueue 中插入 null。如果你试图插入 null,BlockingQueue 将会抛出一个 NullPointerException, 并且可以访问到 BlockingQueue 中的所有元素,而不仅仅是开始和结束的元素。比如说,你将一个对象放入队列之中以等待处理,但你的应用想要将其取消掉。那么你可以调用诸如 remove(o) 方法来将队列之中的特定对象进行移除。但是这么干效率并不高(译者注:基于队列的数据结构,获取除开始或结束位置的其他对象的效率不会太高),因此你尽量不要用这一类的方法,除非你确实不得不那么做

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值