abstract class BaseLinkedAtomicQueue<E>
extends java.util.AbstractQueue<E>
Modifier and Type | Field and Description |
---|---|
private java.util.concurrent.atomic.AtomicReference<LinkedQueueAtomicNode<E>> |
consumerNode |
private java.util.concurrent.atomic.AtomicReference<LinkedQueueAtomicNode<E>> |
producerNode |
Constructor and Description |
---|
BaseLinkedAtomicQueue() |
Modifier and Type | Method and Description |
---|---|
protected E |
getSingleConsumerNodeValue(LinkedQueueAtomicNode<E> currConsumerNode,
LinkedQueueAtomicNode<E> nextNode) |
boolean |
isEmpty()
|
java.util.Iterator<E> |
iterator() |
protected LinkedQueueAtomicNode<E> |
lpConsumerNode() |
protected LinkedQueueAtomicNode<E> |
lpProducerNode() |
protected LinkedQueueAtomicNode<E> |
lvConsumerNode() |
protected LinkedQueueAtomicNode<E> |
lvProducerNode() |
int |
size() |
protected void |
spConsumerNode(LinkedQueueAtomicNode<E> node) |
protected void |
spProducerNode(LinkedQueueAtomicNode<E> node) |
java.lang.String |
toString() |
protected LinkedQueueAtomicNode<E> |
xchgProducerNode(LinkedQueueAtomicNode<E> node) |
contains, containsAll, remove, removeAll, retainAll, toArray, toArray
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
private final java.util.concurrent.atomic.AtomicReference<LinkedQueueAtomicNode<E>> producerNode
private final java.util.concurrent.atomic.AtomicReference<LinkedQueueAtomicNode<E>> consumerNode
protected final LinkedQueueAtomicNode<E> lvProducerNode()
protected final LinkedQueueAtomicNode<E> lpProducerNode()
protected final void spProducerNode(LinkedQueueAtomicNode<E> node)
protected final LinkedQueueAtomicNode<E> xchgProducerNode(LinkedQueueAtomicNode<E> node)
protected final LinkedQueueAtomicNode<E> lvConsumerNode()
protected final LinkedQueueAtomicNode<E> lpConsumerNode()
protected final void spConsumerNode(LinkedQueueAtomicNode<E> node)
public final java.util.Iterator<E> iterator()
public java.lang.String toString()
toString
in class java.util.AbstractCollection<E>
public final int size()
public final boolean isEmpty()
IMPLEMENTATION NOTES:
Queue is empty when producerNode is the same as consumerNode. An alternative implementation would be to observe
the producerNode.value is null, which also means an empty queue because only the consumerNode.value is allowed to
be null.
isEmpty
in interface java.util.Collection<E>
isEmpty
in class java.util.AbstractCollection<E>
MessagePassingQueue.isEmpty()
protected E getSingleConsumerNodeValue(LinkedQueueAtomicNode<E> currConsumerNode, LinkedQueueAtomicNode<E> nextNode)