s.rochester.edu/u/michael/PODC96.html"> Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms by Maged M. Michael and Michael L. Scott.
Iterators are weakly consistent, returning elements reflecting the state of the queue at some point at or since the creation of the iterator. They do not throw {@link java.util.ConcurrentModificationException}, and may proceed concurrently with other operations. Elements contained in the queue since the creation of the iterator will be returned exactly once.
Beware that, unlike in most collections, the {@code size} methodis NOT a constant-time operation. Because of the asynchronous nature of these queues, determining the current number of elements requires a traversal of the elements, and so may report inaccurate results if this collection is modified during traversal. Additionally, the bulk operations {@code addAll}, {@code removeAll}, {@code retainAll}, {@code containsAll}, {@code equals}, and {@code toArray} are not guaranteedto be performed atomically. For example, an iterator operating concurrently with an {@code addAll} operation might view only someof the added elements.
This class and its iterator implement all of the optional methods of the {@link Queue} and {@link Iterator} interfaces.
Memory consistency effects: As with other concurrent collections, actions in a thread prior to placing an object into a {@code ConcurrentLinkedQueue}happen-before actions subsequent to the access or removal of that element from the {@code ConcurrentLinkedQueue} in another thread.
This class is a member of the Java Collections Framework.
@since 1.5
@author Doug Lea
@param < E> the type of elements held in this collection