美文网首页
阻塞队列BlockingQueue

阻塞队列BlockingQueue

作者: 沐兮_d64c | 来源:发表于2020-05-06 14:32 被阅读0次

1,简介

1)BlockingQueue接口定义:继承Queue接口,并且支持两个附加操作的队列。additionally supports operations
获取元素时,等待队列非空。wait for the queue to become non-empty when retrieving an element
存储元素时,等待队列可用。wait for space to become available in the queue when storing an element
2)应用场景:常用于生产者消费者场景
生产者往阻塞队列中添加元素,当队列满时,阻塞线程等待队列可用
消费者从阻塞队列中获取元素,当队列空时,阻塞
3)队列操作
Queue提供:add、remove、element, offer、poll、peek
阻塞队列额外操作:put、take,超时offer、超时poll

image.png
4)额外操作
put:插入元素,如果必要的话阻塞等待队列可用。Inserts the specified element into this queue, waiting if necessary for space to become available.
超时offer:插入元素,最多阻塞等待time超时时间队列可用。waiting up to the specified wait time if necessary for space to become available.
5)生产者消费者模型
image.png
image.png
6)JDK实现类列表
image.png
公平访问队列:等待的线程在获取锁竞争时,按照等待时间,先等待的先获取后等待的后获取
非公平访问:获取的时候,所有等待的线程都有可能获取到锁
ReentrantLock:控制公平锁和非公平锁,公平锁会降低队列性能,默认使用非公平锁

2,ArrayBlockingQueue数组实现的有界队列,ReentrantLock+条件队列

image.png
image.png
put实现
image.png
image.png
take实现
image.png
image.png
超时实现,基于条件队列awaitNanos
image.png
image.png

3,LinkedBlockingQueue链表实现的capacity或者MAX_VALUE的队列

image.png
image.png
put实现
image.png
take实现
image.png

4,PriorityBlockingQueue基于堆结构的优先级无界阻塞队列

image.png
image.png
put实现
image.png
take实现
image.png

5,SynchronousQueue不存储元素的阻塞队列

Transfer接口put操作的时候e值为数据data,take操作的时候e值为null

image.png
TransferQueue实现
image.png
队列为空或者是和队尾数据类型一致
image.png
image.png
awaitFulfill方法,终止条件是s的值是否被修改。如s节点是data节点,就会被修改为null;如果是request节点,就会被修改为data
image.png
image.png
put和take实现
image.png
image.png

相关文章

  • 26. 并发终结之BlockingQueue

    线程池里面最重要的还有个并发容器,即阻塞队列BlockingQueue。BlockingQueue是阻塞队列的接口...

  • 阻塞队列 BlockingQueue

    阻塞队列 BlockingQueue BlockingQueue用法 BlockingQueue 通常用于一个线...

  • Java并发编程:阻塞队列

    Java并发编程:阻塞队列BlockingQueue 以上7类阻塞队列中有LinkedBlockingQueue,...

  • 探讨阻塞队列和线程池源码

    阻塞队列 非阻塞队列是一个先进先出的单向队列(Queue),而BlockingQueue阻塞队列实际是非阻塞队列的...

  • Android中的线程与线程池

    阻塞队列BlockingQueue 阻塞队列常用于生产者——消费者模型,生产者往阻塞队列插入数据,消费者往阻塞队列...

  • 阻塞队列

    BlockingQueue线程池的数据结构是阻塞队列BlockingQueue。(在多线程领域:所谓阻塞,在某些情...

  • Java并发-22.阻塞队列

    阻塞队列(BlockingQueue)是一种支持两个附加操作的队列: 支持阻塞的插入:队列满时,队列阻塞插入元素的...

  • 阻塞队列

    阻塞队列BlockingQueue不支持插入null元素,好好了解一下阻塞队列接口设计。 了解阻塞队列的接口方法后...

  • Java并发包之BlockingQueue

    一、什么是BlockingQueue BlockingQueue即阻塞队列,从阻塞这个词可以看出,在某些情况下对阻...

  • 19-阻塞队列之ArrayBlockingQueue

    Java中的阻塞队列 什么是阻塞队列 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附...

网友评论

      本文标题:阻塞队列BlockingQueue

      本文链接:https://www.haomeiwen.com/subject/mivightx.html