Package rx.internal.util.atomic
Class BaseLinkedAtomicQueue<E>
- java.lang.Object
-
- java.util.AbstractCollection<E>
-
- java.util.AbstractQueue<E>
-
- rx.internal.util.atomic.BaseLinkedAtomicQueue<E>
-
- All Implemented Interfaces:
java.lang.Iterable<E>
,java.util.Collection<E>
,java.util.Queue<E>
- Direct Known Subclasses:
MpscLinkedAtomicQueue
,SpscLinkedAtomicQueue
abstract class BaseLinkedAtomicQueue<E> extends java.util.AbstractQueue<E>
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.concurrent.atomic.AtomicReference<LinkedQueueNode<E>>
consumerNode
private java.util.concurrent.atomic.AtomicReference<LinkedQueueNode<E>>
producerNode
-
Constructor Summary
Constructors Constructor Description BaseLinkedAtomicQueue()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
isEmpty()
java.util.Iterator<E>
iterator()
protected LinkedQueueNode<E>
lpConsumerNode()
protected LinkedQueueNode<E>
lpProducerNode()
protected LinkedQueueNode<E>
lvConsumerNode()
protected LinkedQueueNode<E>
lvProducerNode()
int
size()
protected void
spConsumerNode(LinkedQueueNode<E> node)
protected void
spProducerNode(LinkedQueueNode<E> node)
protected LinkedQueueNode<E>
xchgProducerNode(LinkedQueueNode<E> node)
-
Methods inherited from class java.util.AbstractCollection
contains, containsAll, remove, removeAll, retainAll, toArray, toArray, toString
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
-
-
-
Field Detail
-
producerNode
private final java.util.concurrent.atomic.AtomicReference<LinkedQueueNode<E>> producerNode
-
consumerNode
private final java.util.concurrent.atomic.AtomicReference<LinkedQueueNode<E>> consumerNode
-
-
Method Detail
-
lvProducerNode
protected final LinkedQueueNode<E> lvProducerNode()
-
lpProducerNode
protected final LinkedQueueNode<E> lpProducerNode()
-
spProducerNode
protected final void spProducerNode(LinkedQueueNode<E> node)
-
xchgProducerNode
protected final LinkedQueueNode<E> xchgProducerNode(LinkedQueueNode<E> node)
-
lvConsumerNode
protected final LinkedQueueNode<E> lvConsumerNode()
-
lpConsumerNode
protected final LinkedQueueNode<E> lpConsumerNode()
-
spConsumerNode
protected final void spConsumerNode(LinkedQueueNode<E> node)
-
iterator
public final java.util.Iterator<E> iterator()
-
size
public final int size()
IMPLEMENTATION NOTES:
This is an O(n) operation as we run through all the nodes and count them.
-
isEmpty
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.
-
-