Java之BlockingQueue

目录

 

一、BlockingQueue作用

二、常用场景

三、实现类

四、常见方法

五、实现类

1、LinkedBlockingQueue

2、ArrayBlockingQueue

LinkedBlockingQueue和ArrayBlockingQueue使用对比

3、PriorityBlockingQueue

4、DelayQueue

5、SynchronousQueue

6、LinkedBlockingDeque


一、BlockingQueue作用

BlockingQueue即阻塞队列,它是基于ReentrantLock

二、常用场景

最常用的还是用于实现生产者与消费者模式

Java之BlockingQueue_第1张图片

三、实现类

BlockingQueue是一个接口,它的实现类有ArrayBlockingQueue、DelayQueue、 LinkedBlockingDeque、LinkedBlockingQueue、PriorityBlockingQueue、SynchronousQueue等,它们的区别主要体现在存储结构上或对元素操作上的不同

四、常见方法

Java之BlockingQueue_第2张图片

五、实现类

1、LinkedBlockingQueue

LinkedBlockingQueue采用可重入锁(ReentrantLock)来保证在并发情况下的线程安全。

Java之BlockingQueue_第3张图片

LinkedBlockingDeque和LinkedBlockingQueue的相同点在于: 
1. 基于链表 
2. 容量可选,不设置的话,就是Int的最大值

和LinkedBlockingQueue的不同点在于: 
1. 双端链表和单链表 
2. 不存在哨兵节点 
3. 一把锁+两个条件

实际例子:基于LinkedBlockingQueue实现股票交易系统
https://segmentfault.com/a/1190000013300251

参考:

https://www.cnblogs.com/duodushuduokanbao/p/9556555.html

2、ArrayBlockingQueue

Java之BlockingQueue_第4张图片

LinkedBlockingQueue和ArrayBlockingQueue使用对比

    其次,ArrayBlockingQueue中在入队列和出队列操作过程中,使用的是同一个lock,所以即使在多核CPU的情况下,其读取和操作的都无法做到并行,而LinkedBlockingQueue的读取和插入操作所使用的锁是两个不同的lock,它们之间的操作互相不受干扰,因此两种操作可以并行完成,故LinkedBlockingQueue的吞吐量要高于ArrayBlockingQueue

3、PriorityBlockingQueue

Java之BlockingQueue_第5张图片

4、DelayQueue

      Java之BlockingQueue_第6张图片

例子:

https://www.cnblogs.com/sunzhenchao/p/3515085.html

https://blog.csdn.net/sifanlook/article/details/80250364

5、SynchronousQueue

Java之BlockingQueue_第7张图片

6、LinkedBlockingDeque

和 LinkedBlockingQueue 进行对比:

Java之BlockingQueue_第8张图片

你可能感兴趣的:(【技术】研发)