Java并发包探秘 (一) ConcurrentLinkedQueue(三)

2014-11-24 01:45:24 · 作者: · 浏览: 2
}

E item = p.getItem();

if (item != null) {

nextNode = p;

nextItem = item;

return x;

} else // skip over nulls

p = p.getNext();

}

}

由于CLQ单向链表的特殊性,元素的变化只可能头处删除,在尾处添加。所以使用CLQ的迭代器时元素可能比实际的要多。原因很简单,当你在迭代的时候元素可能已经删除,当然这是你迭代的线程是不可见的。而删除是可见的。

ConcurrentLinkeQueue的其它操作大同小异。都是在不断的轮询中步步判断其它线程的影响,一步一步推进自己的操作逻辑。从而最终完成操作的。