03.JUC 集合 - BlockingQueue

概念

BlockingQueue,即阻塞队列。它是一个支持两个附加操作的队列。这两个附加的操作是:

  • 在队列为空时,获取元素的线程会等待队列变为非空。

  • 当队列满时,存储元素的线程会等待队列可用。

阻塞队列常用于生产者和消费者的场景:

  • 生产者是往队列里添加元素的线程。
  • 消费者是从队列里拿元素的线程。

操作

阻塞队列提供了四种处理方法:

方法\处理方式抛出异常返回特殊值一直阻塞超时退出
入队操作add(e)offer(e)put(e)offer(e,time,unit)
出队操作remove()poll()take()poll(time,unit)
查询操作element()peek()
  • 抛出异常:满队列时,执行入队会抛出异常;空队列时执行出队会抛出异常 。

  • 返回特殊值:入队操作会返回布尔值;出队操作成功返回操作值,失败返回空值。

  • 一直阻塞:满队列时,执行入队会进入条件等待队列,线程阻塞;空队列时,执行出队会进入条件等待队列,线程阻塞 。

  • 超时退出:满队列时,执行入队会阻塞生产者线程一段时间,如果超过一定的时间,生产者线程就会退出。

类型

JDK7 提供了 7 个阻塞队列。分别是:

  • ArrayBlockingQueue :一个由数组结构组成的有界阻塞队列。
  • LinkedBlockingQueue :一个由链表结构组成的有界阻塞队列。
  • PriorityBlockingQueue :一个支持优先级排序的无界阻塞队列。
  • LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。
  • SynchronousQueue:一个不存储元素的阻塞队列。
  • DelayQueue:一个使用优先级队列实现的无界阻塞队列。
  • LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。
    原文作者:JUC
    原文地址: https://blog.csdn.net/u012420654/article/details/56685019
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞