特点
-
BlockingQueue 本身是一个接口,定义了阻塞队列的规范。
-
BlockingQueue 在Queue的基础上额外支持两个(种)操作
-
1)在检索一个队列的时候,如果队列为空,则检索方法被阻塞,直到有元素插入进来。
-
2)在插入一个元素的时候,如果队列不能插入(比如容量满了),则插入方法被阻塞,直到可以插入了。
-
BlockingQueue为当前不能被满足并即刻执行,但是将来一段时间可能被满足并执行的方法提供了四种形式:抛出异常、返回false或者null、永久等待、等待并在一段时间内超时
- BlockingQueue 不接受null 值插入。
- BlockingQueue 可以指定容量,当超过容量的时候,任何插入动作都会被阻塞(或者四种形式中的其他一种)
- BlockingQueue 主要用于生产者消费者队列。
- BlockingQueue 的remove(x)这样的方法不是很有效率,可以偶尔使用一下。
- BlockingQueue 是线程安全的,所有方法(除了批量方法)都通过内部锁或者其他形式的并发控制达到原子性。(BlockingQueue 在多生产者和多消费者的并发下是线程安全的)
- BlockingQueue 本质上并不提供类似 close 或者shutdown 等方法来停止队列,生产者消费者队列场景下,可以通过生产一个poison的内容给消费者,让其识别并作为关闭逻辑。