关系
Queue接口
- add 添加
- offer 添加,不会抛出异常
- remove 移除一个元素,空集合抛出异常
- poll 移除一个元素,空集合返回null
- element 查询一个元素,不在队列中删除,空集合抛出异常
- peek 查询一个元素,不在队列中删除,空集合返回null
BlockingQueue extends Queue
- put 添加一个元素,如果队列已满阻塞
- take 移除一个元素,如果队列已空阻塞
Deque extends Queue 双端队列
- addFirst 添加
- addLast 添加
- 其他方法与Queue中的相似,提供首尾
BlockingDeque extends Deque,BlockingQueue
BlockingQueue实现
- ArrayBlockingQueue 数组实现的环形阻塞队列,有容量限制
- LinkedBlockingQueue 单向链表的阻塞队列
- PriorityBlockingQueue 优先级阻塞队列
- DelayQueue 延时队列
- SynchronousQueue 同步阻塞队列
ArrayBlockingQueue
总结
- 使用数组实现环形队列
- 使用ReentrantLock和Condition实现put和take方法的加锁,条件阻塞和唤醒
- put方法,加锁,Condition队列满则阻塞,否则入队,唤醒空队列的阻塞Condition
- take方法,加锁,Condition队列空则阻塞,否则入队,唤醒满队列的阻塞Condition