JUC_BlockingQueue与BlockingDeque

BlockingQueue的实现类均为单向队列

接口方法: 

操作抛出异常返回值阻塞等待延时等待
添加add(E e)offer(E e)put(E e)offer(E e,long timeout,TimeUnit unit)
删除并获取remove()poll()take()poll(long timeout,TimeUnit unit)
获取队首element()peek()
  • 抛出异常: 添加:成功时返回true,失败时抛出异常;删除:成功时返回被删除元素,失败时抛出异常;获取队首:成功时返回队首,失败时抛出异常
  • 返回值: 添加:成功时返回true,失败时返回false;删除:成功时返回被删除元素,失败时返回null;获取队首:成功时返回队首,失败时返回null
  • 阻塞等待: 添加:队列满时无法添加,将阻塞至队列可添加或响应中断;删除:队列空时无法删除,将阻塞至队列可删除或响应中断
  • 超时等待: 可设置等待时间阈值,若等待时间超过阈值,则视为失败,返回失败时的返回值
  • 补充说明:add方法与remove方法通过offer方法与poll方法实现,只是对于失败时的处理不同(抛出异常或返回值);put方法无返回值;元素默认遵循先进先出,即添加时添加至队尾,删除时删除队首

特点说明:

  • BlockingQueue 不接受 null 元素,null 被用于标识失败的 poll 操作
  • BlockingQueue 可以通过 remainingCapacity 方法重新设置容量;BlockingQueue 的默认最大容量为 Integer.MAX_VALUE(部分实现类的构造方法强制指定初始容量)
  • BlockingQueue 的实现主要用于生产者-消费者模式,BlockingQueue 支持 Collection 接口,因此,使用例如 remove(x) 的方法从队列中删除任意一个元素是可能的(若实现类实现了该功能的话)
  • BlockingQueue 的实现是线程安全的

BlockingDeque的实现类均为双向队列(实际上只有LinkedBlockingDeque)

接口方法:

操作抛出异常返回值阻塞等待超时等待
添加addFirst(E e)offerFirst(E e)putFirst(E e)offerFirst(E e,long timeout,TimeUnit unit)
删除并获取removeFirst()pollFirst()takeFirst()pollFirst(long timeout,TimeUnit unit)
获取队首getFirst()peekFirst()
操作抛出异常返回值阻塞等待超时等待
添加addLast(E e)offerLast(E e)putLast(E e)offerLast(E e,long timeout,TimeUnit unit)
删除并获取removeLast()pollLast()takeLast()pollLast(long timeout,TimeUnit unit)
获取队首getLast()peekLast()

BlockingDeque 接口继承了 BlockingQueue 接口,所以其实现类需要实现 BlockingQueue 接口的方法,换言之,BlockingDeque 接口的实现类的实例可调用上文中陈述的 BlockingQueue 接口的方法

BlockingDeque 与 BlockingQueue 均线程安全,均不接受 null 元素,均可通过remainingCapacity 方法重新设置容量(BlockingDeque 的默认最大容量为 Integer.MAX_VALUE,其唯一实现类 LinkedBlockingDeque 允许不在构造方法中指定初始容量 )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值