上一篇我们介绍了 LinkedBlockingDeque 的兄弟篇 LinkedBlockingQueue 。听名字也知道一个实现了 Queue 接口,一个实现了 Deque 接口,由于 Deque 接口又继承于 Queue ,所以 LinkedBlockingDeque 自然就有 LinkedBlockingQueue 的所有方法,并且还提供了双端队列的一些其他方法,不清除队列相关类的继承关系的童鞋,请移步看我之前的文章:说说队列Queue,下面的这张图就是该文章中的。

【java多线程】队列系统之LinkedBlockingDeque源码

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();
View Code

相关文章:

  • 2021-02-03
  • 2021-09-30
  • 2022-01-09
  • 2021-11-20
  • 2021-12-20
  • 2022-12-23
  • 2018-07-02
猜你喜欢
  • 2022-01-21
  • 2021-05-15
  • 2021-07-03
  • 2022-01-19
  • 2022-12-23
  • 2021-10-15
相关资源
相似解决方案