ConcurrentLinkedQueue多线程安全的并发删除队列元素
1、remove方法 public boolean remove(Object o) { if (o != null) { Node<E> next, pred = null; for (Node<E> p = first(); p != null; pred = p, p = next) { boolean removed = false; E item = p.item; if (item != null) { if (!o.equals(item)) { next = succ(p); continue; } removed = p.casItem(item, null); } next = succ(p); if (pred != null && next != null) // unlink pred.casNext(p, next); if (removed) return true; } } return false; } 2、初始化队列 3、线程过来 执行remove("王五") 1)点击下面的first() for (Node<E> p = first(); p != null; pred = p, p = next) { first()方法如下: Node<E> first() { restartFromHead: for (;;) { for (Node<E>