阻塞队列BlockingQueue,java.util.concurrent下的BlockingQueue接口表示一个线程放入和提取实例的队列。

适用场景:

BlockingQueue通常用于一个线程生产对象,而另一个线程消费对象的场景。

一个线程往里面放,另一个线程从里面取的一个BlockingQueue。

生产线程,一个线程将会持续生产新对象并将其插入到队列中去,直到队列达到它所能容纳的临界点。如果该阻塞队列到达了临界点,负责生产的线程将会在往里面插入新对象时发生阻塞。它会一个处于阻塞中,直到负责消费的线程从队列中拿走一个对象。

消费线程,负责消费的线程将会一直从该阻塞队列中拿出对象。如果消费线程尝试去从一个空的队列中提取对象的话,这个消费线程将会处于阻塞之中,直到一个生产线程把一个对象丢进队列。

BlockingQueue的方法

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

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

无法向一个BlockingQueue中插入null。如果试图插入null,BlockingQueue会抛出一个NullPointException。

可以访问到 BlockingQueue 中的所有元素,而不仅仅是开始和结束的元素。比如说,你将一个对象放入队列之中以等待处理,但你的应用想要将其取消掉。那么你可以调用诸如 remove(o) 方法来将队列之中的特定对象进行移除。但是这么干效率并不高(译者注:基于队列的数据结构,获取除开始或结束位置的其他对象的效率不会太高),因此你尽量不要用这一类的方法,除非你确实不得不那么做。

BlockingQueue的实现

BlockingQueue接口的实现类:

  • ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列
  • DelayQueue:一个使用优先级队列实现的无界阻塞队列
  • LinkedBlockingQueue:一个由链表结构组成的有界阻塞队列
  • PriorityBlockingQueue:一个支持优先级排序的无界阻塞队列
  • SynchronousQueue:一个不存储元素的阻塞队列

转载于:https://www.cnblogs.com/qjm201000/p/10136910.html

并发编程-concurrent指南-阻塞队列BlockingQueue相关推荐

  1. 【JUC并发编程10】阻塞队列

    文章目录 10 阻塞队列 10.1 阻塞队列概述 10.2 阻塞队列架构 10.3 阻塞队列分类 10.4 阻塞队列核心方法 10 阻塞队列 10.1 阻塞队列概述 阻塞队列是共享队列(多线程操作), ...

  2. 并发编程-concurrent指南-原子操作类-AtomicInteger

    在java并发编程中,会出现++,--等操作,但是这些不是原子性操作,这在线程安全上面就会出现相应的问题.因此java提供了相应类的原子性操作类. 1.AtomicInteger 可以用原子方式更新的 ...

  3. 并发编程-concurrent指南-原子操作类-AtomicBoolean

    类AtomicBoolean 可以用原子方式更新的 boolean 值.有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 包规范.AtomicBoolean 可用 ...

  4. 并发编程-concurrent指南-线程池ExecutorService的使用

    有几种不同的方式来将任务委托给 ExecutorService 去执行: execute(Runnable) submit(Runnable) submit(Callable) invokeAny(- ...

  5. 并发编程 – Concurrent 用户指南

    转载自 并发编程 – Concurrent 用户指南 1. java.util.concurrent – Java 并发工具包 Java 5 添加了一个新的包到 Java 平台,java.util.c ...

  6. Java阻塞队列(BlockingQueue)实现 生产者/消费者 示例

    Java阻塞队列(BlockingQueue)实现 生产者/消费者 示例 本文由 TonySpark 翻译自 Javarevisited.转载请参见文章末尾的要求. Java.util.concurr ...

  7. java阻塞队列作用_简单理解阻塞队列(BlockingQueue)中的take/put方法以及Condition存在的作用...

    简单理解阻塞队列(BlockingQueue)中的take/put方法以及Condition存在的作用 Condition:可以理解成一把锁的一个钥匙,它既可以解锁(通知放行),又可以加锁(阻塞) n ...

  8. 抽象同步器AQS应用之--阻塞队列BlockingQueue,如何保证任务一定被消费?

    文章目录 1.阻塞队列简介 2. BlockingQueue源码分析 3. 生产者消费者模型如何保证信息不会丢失? 1.阻塞队列简介 1.1 什么是阻塞队列? 阻塞队列是一个队列 ①:当队列是空的,从 ...

  9. java 阻塞队列 BQ_阻塞队列 BlockingQueue的使用(二)

    原 阻塞队列 BlockingQueue的使用(二) BlockingQueue 的核心方法:方法类型抛出异常特殊值阻塞超时 插入add(e)offer(e)put(e)offer(e,time,un ...

最新文章

  1. Python,OpenCV进行直方图反投影
  2. win7如何设置wifi热点_xp系统怎么设置无线网络热点(电脑设置wifi热点步骤)
  3. Android中实现整个视图切换的左右滑动效果
  4. python人工智能方向面试准备_高薪直通车丨人工智能+Python面试经验分享(西安**思数据)...
  5. python单词意思-python 前面几个单词含义
  6. C语言——球体体积判断素数用递归计算Fibonacci数列
  7. Redis的设计与实现之整数集合和压缩列表
  8. .NET Core 构建配置文件从 project.json 到 .csproj
  9. 【Javascript 拾遗之三】Closure 闭包
  10. 如何把密度函数化为标准正态二维分布_概率微课:第三章(22) 二维随机变量及分布函数定义...
  11. [Windows Server 2012] 安装PHP+MySQL方法
  12. 名称节点和数据节点作用
  13. python格式化输出类型_Python print 格式化输出
  14. JAVA_SE基础——46.引用数据类型变量.值交换[独家深入解析]
  15. IDEA 编译构建等工程配置
  16. 小乔皮肤分析-缤纷独角兽/青蛇皮肤
  17. xps13 linux 硬盘,在xps13上安装ubuntu16.04教程
  18. java支付宝提现功能,单笔转账到支付宝账户
  19. char类型数据说明
  20. 跨专业考计算机研究生有专业限制吗,跨专业考计算机研究生难不难

热门文章

  1. Jsp、Servlet
  2. 【BZOJ5213】[ZJOI2018]迷宫(神仙题)
  3. 使用shiro框架,注销问题的解决
  4. Dajngo-Xadmin 修改菜单摆放排序
  5. MySQL--开发技巧(一)
  6. 关闭uboot MMU 会导致android2.3 S5pv210 系统不稳定?!why
  7. 【记】jQuery中的选择器:visible对visibility:hidden的处理
  8. Linux常用命令和vi,gdb的使用
  9. 最新70佳单页网站设计案例欣赏(上篇)
  10. linq 解决winForm中控件CheckedListBox操作的问题。(转载)