E -
public final class MpscLinkedQueue<E> extends AbstractQueue<E>
| Modifier and Type | Field and Description |
|---|---|
protected static long |
C_NODE_OFFSET
|
protected LinkedQueueNode |
consumerNode
|
protected static long |
P_NODE_OFFSET
|
protected LinkedQueueNode |
producerNode
|
| Constructor and Description |
|---|
MpscLinkedQueue()
|
| Modifier and Type | Method and Description |
|---|---|
boolean |
isEmpty()
|
Iterator |
iterator()
|
protected LinkedQueueNode |
lpConsumerNode()
|
protected LinkedQueueNode |
lpProducerNode()
|
protected LinkedQueueNode |
lvConsumerNode()
|
protected LinkedQueueNode |
lvProducerNode()
|
boolean |
offer(E nextValue)
|
E |
peek()
|
E |
poll()
|
int |
size()
|
protected void |
spConsumerNode(LinkedQueueNode
|
protected void |
spProducerNode(LinkedQueueNode
|
protected LinkedQueueNode |
xchgProducerNode(LinkedQueueNode
|
contains, containsAll, remove, removeAll, retainAll, toArray, toArray, toStringclone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitcontains, containsAll, equals, hashCode, parallelStream, remove, removeAll, removeIf, retainAll, spliterator, stream, toArray, toArrayprotected static final long C_NODE_OFFSET
protected LinkedQueueNode<E> consumerNode
protected static final long P_NODE_OFFSET
protected LinkedQueueNode<E> producerNode
protected final LinkedQueueNode<E> xchgProducerNode(LinkedQueueNode <E> newVal)
public final boolean offer(E nextValue)
IMPLEMENTATION NOTES:
Offer is allowed from multiple threads.
Offer allocates a new node and:
MessagePassingQueue.offer(Object) ,
Queue.offer(java.lang.Object)
public final E poll()
IMPLEMENTATION NOTES:
Poll is allowed from a SINGLE thread.
Poll reads the next node from the consumerNode and:
MessagePassingQueue.poll() ,
Queue.poll()
public final E peek()
public final Iterator<E> iterator()
public final int size()
IMPLEMENTATION NOTES:
This is an O(n) operation as we run through all the nodes and count them.
size in interface
Collection<E>
size in class
AbstractCollection<E>
Collection.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
Collection<E>
isEmpty in class
AbstractCollection<E>
MessagePassingQueue.isEmpty()
protected final void spConsumerNode(LinkedQueueNode<E> node)
protected final LinkedQueueNode<E> lvConsumerNode()
protected final LinkedQueueNode<E> lpConsumerNode()
protected final void spProducerNode(LinkedQueueNode<E> node)
protected final LinkedQueueNode<E> lvProducerNode()
protected final LinkedQueueNode<E> lpProducerNode()