/**
* Removes all of the elements from this deque.
*/
public void clear() {
while (pollFirst() != null)
;
}
当前实现只是逐个弹出队列中的元素,但是可以通过将头尾指针项重置为空队列来完成吗? 这里需要注意什么?
答案 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()
作为一种操作与其他操作相比“不那么重要”,所以即使可能以不同的方式实现它,这样做也没什么用。