BlockingQueue
1. 类层次图
从图中可以得知几个信息:
- BlockingQueue是个接口,它是本质上是一个Queue。
- 主要有3个实现类。
2. 主要方法
根据阅读注释和跟踪父类Queue源码,我们得知,BlockingQueue的方法主要分三类:
- 放置元素到尾部。。
- add(Object): 继承自Queue
- offer(Object): 继承自Queue
- put(Object): 声明于BlockingQueue
- offer(Object, long, TimeUnit): 声明于BlockingQueue
- 取出头部元素。移除头部元素,且把头部设为返回值。
- remove(): 继承自Queue
- poll(): 继承自Queue
- take(): 声明于BlockingQueue
- poll(long, TimeUnit): 声明于BlockingQueue
- 查看头部元素。查看而不移除头部。
- element(): 继承自Queue
- peek(): 继承自Queue
为什么一个操作能对应2到4种方法名呢?这是因为不管放置、取出还是查看,都对应四种行为模式:
- Throws exception。操作失败时抛出异常。
- Special value。操作失败时返回
null或false - Blocks。阻塞进程直到操作成功
- Times out。在放弃操作前等待至多一个最大时间限制。
上文提到的放置、取出的四种方法,按顺序刚好对应这四种行为模式。
至于查看的两种方法,element()在队列为空时抛出异常,peek()则会返回null。
各种阻塞队列的实现
详情见BlockingQueue深入解析-BlockingQueue看这一篇就够了