美文网首页
阻塞队列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

    相关文章

      网友评论

          本文标题:阻塞队列BlockingQueue

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