📌  相关文章
📜  Java中的 ConcurrentLinkedDeque removeLast() 方法(1)

📅  最后修改于: 2023-12-03 15:16:22.031000             🧑  作者: Mango

Java中的 ConcurrentLinkedDeque removeLast() 方法

简介

在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;
        }
    }
}
返回值
  • 如果队列为空,则返回 null
  • 否则移除并返回队列的末尾元素
示例
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"
注意事项
  • 其他线程的并发操作不会被阻碍,因为ConcurrentLinkedDeque是线程安全的
  • 如果队列为空,则返回 null
  • 这个方法可能非常慢,因为它必须遍历哈希表以查找最后一个元素