java.util.concurrent 包里的 BlockingDeque 接口表示一个线程安放入和提取实例的双端队列。

BlockingDeque 类是一个双端队列,在不能够插入元素时,它将阻塞住试图插入元素的线程;在不能够抽取元素时,它将阻塞住试图抽取的线程。

deque(双端队列) 是 “Double Ended Queue” 的缩写。因此,双端队列是一个你可以从任意一端插入或者抽取元素的队列

使用:

在线程既是一个队列的生产者又是这个队列的消费者的时候可以使用到 BlockingDeque。如果生产者线程需要在队列的两端都可以插入数据,消费者线程需要在队列的两端都可以移除数据,这个时候也可以使用 BlockingDeque。

一个线程生产元素,并把它们插入到队列的任意一端。如果双端队列已满,插入线程将被阻塞,直到一个移除线程从该队列中移出了一个元素。如果双端队列为空,移除线程将被阻塞,直到一个插入线程向该队列插入了一个新元素。

BlockingDeque的方法

四组不同的行为方式解释:

  • 抛异常:如果试图的操作无法立即执行,抛一个异常。
  • 特定值:如果试图的操作无法立即执行,返回一个特定的值(常常是 true / false)。
  • 阻塞:如果试图的操作无法立即执行,该方法调用将会发生阻塞,直到能够执行。
  • 超时:如果试图的操作无法立即执行,该方法调用将会发生阻塞,直到能够执行,但等待时间不会超过给定值。返回一个特定值以告知该操作是否成功(典型的是 true / false)。

BlockingDeque 继承自BlockingQueue

BlockingDeque 接口继承自 BlockingQueue 接口。这就意味着你可以像使用一个 BlockingQueue 那样使用BlockingDeque。如果你这么干的话,各种插入方法将会把新元素添加到双端队列的尾端,而移除方法将会把双端队列的首端的元素移除。正如 BlockingQueue 接口的插入和移除方法一样。

以下是 BlockingDeque 对 BlockingQueue 接口的方法的具体内部实现:

BlockingDeque 的实现

BlockingDeque接口的实现类:

最新文章

  1. 总结C#保留小数位数及百分号处理
  2. Java语言的个人理解
  3. IIS-如果外网访问不到 域名
  4. PHP开发绝对不能违背的安全铁则
  5. Robotium中定位Android客户端疑难元素
  6. LICEcap
  7. 重定位shell
  8. C++中的INL
  9. hdu 4739
  10. 3月题外:关于GeoServer和OpenLayers3实用开源插件或组件的总结
  11. OJ2236“孤单数”题目报告
  12. 一起聊聊什么是P问题、NP问题、NPC问题
  13. 结合源码浅谈Spring容器与其子容器Spring MVC 冲突问题
  14. Jenkins [Error] at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.redeploy(AbstractTomcatManagerDeployer.java:192)
  15. Java使用RabbitMQ之消息确认(confirm模板)
  16. [JAVA]JAVA章3 如何获取及查看DUMP文件
  17. mongodb副本集升级步骤
  18. Java 容器源码分析之集合类详解
  19. dstat 监控时,无颜色显示
  20. django 错误信息

热门文章

  1. 知乎C++问题整理
  2. react项目实践——(3)babel
  3. SQL like使用 模糊查询
  4. 【码云周刊第 22 期】GO :互联网时代的 C 语言!
  5. mysql主从配置及其读写分离
  6. 活锁(livelock) 专题
  7. Win10《芒果TV》商店版跻身Windows商店《热门免费应用》前12强
  8. mysql索引创建&查看&删除
  9. C#高性能大容量SOCKET并发(零):代码结构说明
  10. UWP-标题栏”后退“按钮