可以将ConcurrentLinkedDeque清除为重置头尾指针吗?

时间:2016-09-26 08:45:59

标签: java

/**
 * Removes all of the elements from this deque.
 */
public void clear() {
    while (pollFirst() != null)
        ;
}

当前实现只是逐个弹出队列中的元素,但是可以通过将头尾指针项重置为空队列来完成吗? 这里需要注意什么?

1 个答案:

答案 0 :(得分:0)

pollFirst()方法不仅仅是从队列中弹出项目。它以线程安全的方式完成。

public E pollFirst() {
    for (Node<E> p = first(); p != null; p = succ(p)) {
        E item = p.item;
        if (item != null && p.casItem(item, null)) {
            unlink(p);
            return item;
        }
    }
    return null;
}

由于您希望将并发集合保持并发,因此一种方法是确保您使用已经并发的操作,例如pollFirst()

同样值得注意的是,clear()作为一种操作与其他操作相比“不那么重要”,所以即使可能以不同的方式实现它,这样做也没什么用。