BlockingQueue是阻塞队列接口类,该接口继承了Queue接口

BlockingQueue实现类常见的有以下几种。

  1. ArrayBlockingQueue:ArrayBlockingQueue 是一个有界的阻塞队列,其内部实现是将对象放到一个数组里。有界也就意味着,它不能够存储无限多数量的元素。它有一个同一时间能够存储元素数量的上限。你可以在对其初始化的时候设定这个上限,但之后就无法对这个上限进行修改了(译者注:因为它是基于数组实现的,也就具有数组的特性:一旦初始化,大小就无法修改)。

  2. DelayQueue:DelayQueue 对元素进行持有直到一个特定的延迟到期。注入其中的元素必须实现 java.util.concurrent.Delayed 接口。

  3. LinkedBlockingQueue:LinkedBlockingQueue 内部以一个链式结构(链接节点)对其元素进行存储。如果需要的话,这一链式结构可以选择一个上限。如果没有定义上限,将使用 Integer.MAX_VALUE 作为上限

  4. PriorityBlockingQueue:PriorityBlockingQueue 是一个无界的并发队列。它使用了和类 java.util.PriorityQueue 一样的排序规则。你无法向这个队列中插入 null 值。所有插入到 PriorityBlockingQueue 的元素必须实现 java.lang.Comparable 接口。因此该队列中元素的排序就取决于你自己的 Comparable 实现

  5. SynchronousQueue:SynchronousQueue 是一个特殊的队列,它的内部同时只能够容纳单个元素。如果该队列已有一元素的话,试图向队列中插入一个新元素的线程将会阻塞,直到另一个线程将该元素从队列中抽走。同样,如果该队列为空,试图向队列中抽取一个元素的线程将会阻塞,直到另一个线程向队列中插入了一条新的元素。

BlockingQueue接口提供了

3个添加元素方法

  1. add:添加元素到队列里,添加成功返回true,由于容量满了添加失败会抛出IllegalStateException异常

  2. offer:添加元素到队列里,添加成功返回true,添加失败返回false

  3. put:添加元素到队列里,如果容量满了会阻塞直到容量不满

3个删除方法。

  1. poll:删除队列头部元素,如果队列为空,返回null。否则返回元素。

  2. remove:基于对象找到对应的元素,并删除。删除成功返回true,否则返回false

  3. take:删除队列头部元素,如果队列为空,一直阻塞到队列有元素并删除

例子:生产者和消费者非常适合阻塞队列,其实我也弄过redis作为生产者和消费者模式,redis的list非常适合做队列,生产者放入队列和消费者从队列里取出,同时也提供阻塞的取出等。先回归到java的阻塞队列里,用LinkedBlockingQueue来做这个例子。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

java 阻塞队列 LinkedBlockingQueue ArrayBlockingQueue 分析相关推荐

  1. 并发编程5:Java 阻塞队列源码分析(下)

    上一篇 并发编程4:Java 阻塞队列源码分析(上) 我们了解了 ArrayBlockingQueue, LinkedBlockingQueue 和 PriorityBlockingQueue,这篇文 ...

  2. Java阻塞队列ArrayBlockingQueue和LinkedBlockingQueue实现原理分析

    转载自  Java阻塞队列ArrayBlockingQueue和LinkedBlockingQueue实现原理分析 Java中的阻塞队列接口BlockingQueue继承自Queue接口. Block ...

  3. 有界阻塞队列ArrayBlockingQueue和无界阻塞队列LinkedBlockingQueue

    ArrayBlockingQueue和LinkedBlockingQueue最大的区别是一个是有界无界,各有优劣. 先看实例代码: main函数起2个线程模拟生成消费者 import java.uti ...

  4. Java集合--阻塞队列(ArrayBlockingQueue)

    Java集合–阻塞队列(ArrayBlockingQueue) 1 ArrayBlockingQueue ArrayBlockingQueue是一个阻塞队列,底层使用数组结构实现,按照先进先出(FIF ...

  5. 并发-阻塞队列源码分析

    阻塞队列 参考: http://www.cnblogs.com/dolphin0520/p/3932906.html http://endual.iteye.com/blog/1412212 http ...

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

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

  7. Java 阻塞队列原理

    阻塞队列(BlockingQueue)是一个支持两个附加操作的队列.这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空.当队列满时,存储元素的线程会等待队列可用.阻塞队列常用于生产者和 ...

  8. 无界阻塞队列 LinkedBlockingQueue 原理探究

    2019独角兽企业重金招聘Python工程师标准>>> 一.前言 本文介绍下使用独占锁实现的阻塞队列LinkedBlockingQueue的实现. 二. LinkedBlocking ...

  9. Java阻塞队列 LinkedBlockingDeque

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/120833494 本文出自[赵彦军的博客] Java队列 Queue Java队列 ...

最新文章

  1. 键盘 Input子系统
  2. Android root概念
  3. ASP.NET Core依赖注入初识与思考
  4. 隐马尔科夫模型,第三种问题解法,维比特算法(biterbi) algorithm python代码
  5. 常用电子元器件基本知识整理
  6. win服务器系统无法切换输入法,win10输入法切换不了怎么办?win10无法切换输入法现象的解决方法...
  7. Spring(11) - Introductions进行类扩展方法
  8. Aptos教程-参与官方激励测试网(AIT2 激励测试网)
  9. 韦东山第3期嵌入式Linux项目-视频监控-1-v4l2视频框架分析
  10. 认知突围_移动应用:突围
  11. 2018年第九届蓝桥杯B组第四题:摔手机题解
  12. 智能家居项目进度控制表
  13. 绘画教程:日式温泉场景怎么画?露天浴场的正确画法!
  14. vue webapp之music(六)利用axios与后端接口代理请求歌单推荐数据
  15. A* 流程+代码详细注释
  16. 李沐精读论文:ViT 《An Image Is Worth 16x16 Words: Transformers For Image Recognition At Scale》
  17. 单目运算符、双目运算符、三目运算符
  18. 中国海洋大学计算机专硕复试线,2020中国海洋大学考研复试分数线已公布
  19. 短视频App对比分析报告
  20. 文正机械电子工程专业课_机械电子工程有些什么课程

热门文章

  1. 一张表按分类查询:只显示前2行
  2. 通过java反射机制获取该类的所有属性类型、值。
  3. poj 1637(混合图求欧拉回路)
  4. C# delegate and event
  5. IP头结构&其他解析
  6. 8.继续分析一破解加密码获取-最最最简单的注册机
  7. 【Java 虚拟机原理】栈帧 | 动态链接 | 方法区 | 字节码文件二进制分析
  8. 【Java 虚拟机原理】栈帧 | 局部变量表 | 操作数栈 | 方法出口 | JVM 指令逐条解析
  9. 【Flutter】Flutter 手势交互 ( 点击事件处理 | 点击 onTap | 双击 | 长按 onLongPress | 点击取消 | 按下 onTapDown | 抬起 onTapUp )
  10. 【组合数学】非降路径问题 ( 非降路径问题概要说明 | 非降路径问题基本模型 | 非降路径问题拓展模型 1 非原点起点 | 非降路径问题拓展模型 2 有途经点 )