阻塞队列
阻塞队列是支持两个附加操作的队列。这两个附加操作支持阻塞插入和移除方法:
- 阻塞启用的插入:当队列满时,它会阻塞插入元素的线程,直到队列不满意为止。
- 阻塞删除:当队列为空时,检索元素的线程等待队列变为非空。
阻塞队列通常用于生产者-消费者场景。生产者是向队列添加元素的线程,使用者是将元素从队列中取出的线程,阻塞队列是存储和检索元素的容器。
阻塞队列的4种处理方式:
- 抛出异常:
add(e)
当队列满,再插入元素,抛出异常remove()
当队列空,再删除元素,抛出异常element()
获取元素
- 返回特殊值:
offer(e)
插入元素时,插入成功返回truepoll()
移除元素,成功返回该值,否则返回nullpeek()
- 一直阻塞:
put(e)
当阻塞队列满时,再插入时会阻塞生产者线程,直到队列可用或中断退出take()
当队列空,再移除元素会阻塞消费者线程,直到队列不空
- 超时退出
offer(e, time, unit)
队列满时再插入元素,阻塞,超时退出poll(time, unit)
队列空时移除元素,