并发编程-concurrent指南-阻塞队列BlockingQueue
阻塞队列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相关推荐
- 【JUC并发编程10】阻塞队列
文章目录 10 阻塞队列 10.1 阻塞队列概述 10.2 阻塞队列架构 10.3 阻塞队列分类 10.4 阻塞队列核心方法 10 阻塞队列 10.1 阻塞队列概述 阻塞队列是共享队列(多线程操作), ...
- 并发编程-concurrent指南-原子操作类-AtomicInteger
在java并发编程中,会出现++,--等操作,但是这些不是原子性操作,这在线程安全上面就会出现相应的问题.因此java提供了相应类的原子性操作类. 1.AtomicInteger 可以用原子方式更新的 ...
- 并发编程-concurrent指南-原子操作类-AtomicBoolean
类AtomicBoolean 可以用原子方式更新的 boolean 值.有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 包规范.AtomicBoolean 可用 ...
- 并发编程-concurrent指南-线程池ExecutorService的使用
有几种不同的方式来将任务委托给 ExecutorService 去执行: execute(Runnable) submit(Runnable) submit(Callable) invokeAny(- ...
- 并发编程 – Concurrent 用户指南
转载自 并发编程 – Concurrent 用户指南 1. java.util.concurrent – Java 并发工具包 Java 5 添加了一个新的包到 Java 平台,java.util.c ...
- Java阻塞队列(BlockingQueue)实现 生产者/消费者 示例
Java阻塞队列(BlockingQueue)实现 生产者/消费者 示例 本文由 TonySpark 翻译自 Javarevisited.转载请参见文章末尾的要求. Java.util.concurr ...
- java阻塞队列作用_简单理解阻塞队列(BlockingQueue)中的take/put方法以及Condition存在的作用...
简单理解阻塞队列(BlockingQueue)中的take/put方法以及Condition存在的作用 Condition:可以理解成一把锁的一个钥匙,它既可以解锁(通知放行),又可以加锁(阻塞) n ...
- 抽象同步器AQS应用之--阻塞队列BlockingQueue,如何保证任务一定被消费?
文章目录 1.阻塞队列简介 2. BlockingQueue源码分析 3. 生产者消费者模型如何保证信息不会丢失? 1.阻塞队列简介 1.1 什么是阻塞队列? 阻塞队列是一个队列 ①:当队列是空的,从 ...
- java 阻塞队列 BQ_阻塞队列 BlockingQueue的使用(二)
原 阻塞队列 BlockingQueue的使用(二) BlockingQueue 的核心方法:方法类型抛出异常特殊值阻塞超时 插入add(e)offer(e)put(e)offer(e,time,un ...
最新文章
- Python,OpenCV进行直方图反投影
- win7如何设置wifi热点_xp系统怎么设置无线网络热点(电脑设置wifi热点步骤)
- Android中实现整个视图切换的左右滑动效果
- python人工智能方向面试准备_高薪直通车丨人工智能+Python面试经验分享(西安**思数据)...
- python单词意思-python 前面几个单词含义
- C语言——球体体积判断素数用递归计算Fibonacci数列
- Redis的设计与实现之整数集合和压缩列表
- .NET Core 构建配置文件从 project.json 到 .csproj
- 【Javascript 拾遗之三】Closure 闭包
- 如何把密度函数化为标准正态二维分布_概率微课:第三章(22) 二维随机变量及分布函数定义...
- [Windows Server 2012] 安装PHP+MySQL方法
- 名称节点和数据节点作用
- python格式化输出类型_Python print 格式化输出
- JAVA_SE基础——46.引用数据类型变量.值交换[独家深入解析]
- IDEA 编译构建等工程配置
- 小乔皮肤分析-缤纷独角兽/青蛇皮肤
- xps13 linux 硬盘,在xps13上安装ubuntu16.04教程
- java支付宝提现功能,单笔转账到支付宝账户
- char类型数据说明
- 跨专业考计算机研究生有专业限制吗,跨专业考计算机研究生难不难
热门文章
- Jsp、Servlet
- 【BZOJ5213】[ZJOI2018]迷宫(神仙题)
- 使用shiro框架,注销问题的解决
- Dajngo-Xadmin 修改菜单摆放排序
- MySQL--开发技巧(一)
- 关闭uboot MMU 会导致android2.3 S5pv210 系统不稳定?!why
- 【记】jQuery中的选择器:visible对visibility:hidden的处理
- Linux常用命令和vi,gdb的使用
- 最新70佳单页网站设计案例欣赏(上篇)
- linq 解决winForm中控件CheckedListBox操作的问题。(转载)