smile
LinkedBlockingDeque是链表形式的双向链表,通过一个内部类Node实现,看下Node类的定义:
static final class Node {
E item;
Node prev;
Node next;
Node(E x) {
item = x;
}
}
在类LinkedBlockingDeque中有两个变量first 和last,并通过Node的prev和next实现双向队列。
Node first;
Node last;
看看入队方法,会有类似addLast和addFirst的方法,方法最终调用linkFist和linkLast的方法,看看方法定义:
//从头部入队
private boolean linkFirst(Node node) {
if (count >= capacity)
return false;
Node f = first;
node.next = f;
first = node;
if (last == null)
last = node;
else
f.prev = node;
++count;
notEmpty.signal();
return true;
}
//从尾部入队
private boolean linkLast(Node node) {
if (count >= capacity)
return false;
Node l = last;
node.prev = l;
last = node;
if (first == null)
first = node;
else
l.next = node;
++count;
notEmpty.signal();
return true;
}
领取专属 10元无门槛券
私享最新 技术干货