上一篇我们介绍了 LinkedBlockingDeque 的兄弟篇 LinkedBlockingQueue 。听名字也知道一个实现了 Queue 接口,一个实现了 Deque 接口,由于 Deque 接口又继承于 Queue ,所以 LinkedBlockingDeque 自然就有 LinkedBlockingQueue 的所有方法,并且还提供了双端队列的一些其他方法,不清除队列相关类的继承关系的童鞋,请移步看我之前的文章:说说队列Queue,下面的这张图就是该文章中的。
2、源码分析
2.1、属性
/** * 节点类,维护了前一个元素和后一个元素,用来存储数据 */ static final class Node<E> { E item; Node<E> prev; Node<E> next; Node(E x) { item = x; } } /** * 阻塞队列的第一个元素的节点 */ transient Node<E> first; /** * 阻塞队列的尾节点 */ transient Node<E> last; /** 当前阻塞队列中的元素个数 */ private transient int count; /** 阻塞队列的大小,默认为Integer.MAX_VALUE */ private final int capacity; /** 所有访问元素时使用的锁 */ final ReentrantLock lock = new ReentrantLock(); /** 等待take的条件对象 */ private final Condition notEmpty = lock.newCondition(); /** 等待put的条件对象 */ private final Condition notFull = lock.newCondition();