📅  最后修改于: 2023-12-03 15:16:22.031000             🧑  作者: Mango
在Java中,ConcurrentLinkedDeque是一种非阻塞式、线程安全的队列(双向队列),可以支持并行地添加、移除元素。ConcurrentLinkedDeque removeLast() 方法用于从队列的末尾(尾节点)移除并返回元素。
public E removeLast()
ConcurrentLinkedDeque removeLast() 方法主要的实现就是对队列的尾节点进行操作,即将尾节点的上一个节点设置为新的尾节点,并将原本的尾节点从队列中移除。
具体实现如下:
public E removeLast() {
Node<E> t = last;
Node<E> p = t;
for (;;) {
if (p == null)
return null;
Node<E> prev = p.prev;
if (prev == null) {
if (unlinkLast(p))
return p.item;
// else continue with inner loop to get new last
}
else if (t != last) {
t = last;
p = t;
continue;
}
else {
p = prev;
}
}
}
ConcurrentLinkedDeque<String> deque = new ConcurrentLinkedDeque<>();
deque.add("a");
deque.add("b");
deque.add("c");
System.out.println(deque.removeLast()); // "c"
System.out.println(deque.removeLast()); // "b"
System.out.println(deque.removeLast()); // "a"