abstract class BaseSpscLinkedAtomicArrayQueue<E> extends BaseSpscLinkedAtomicArrayQueueProducerColdFields<E> implements QueueProgressIndicators, IndexedQueueSizeUtil.IndexedQueue
Modifier and Type | Field and Description |
---|---|
protected static java.lang.Object |
JUMP |
producerBuffer, producerBufferLimit, producerMask
P_INDEX_UPDATER, producerIndex
p0, p1, p10, p11, p12, p13, p14, p15, p16, p17, p2, p3, p4, p5, p6, p7
C_INDEX_UPDATER, consumerIndex
consumerBuffer, consumerMask
Constructor and Description |
---|
BaseSpscLinkedAtomicArrayQueue() |
Modifier and Type | Method and Description |
---|---|
protected static <E> java.util.concurrent.atomic.AtomicReferenceArray<E> |
allocate(int capacity) |
protected static int |
calcElementOffset(long index,
long mask) |
long |
currentConsumerIndex()
This method has no concurrent visibility semantics.
|
long |
currentProducerIndex()
This method has no concurrent visibility semantics.
|
boolean |
isEmpty() |
java.util.Iterator<E> |
iterator() |
protected void |
linkOldToNew(long currIndex,
java.util.concurrent.atomic.AtomicReferenceArray<E> oldBuffer,
int offset,
java.util.concurrent.atomic.AtomicReferenceArray<E> newBuffer,
int offsetInNew,
E e) |
long |
lvConsumerIndex() |
protected E |
lvElement(java.util.concurrent.atomic.AtomicReferenceArray<E> buffer,
int offset) |
protected java.util.concurrent.atomic.AtomicReferenceArray<E> |
lvNextArrayAndUnlink(java.util.concurrent.atomic.AtomicReferenceArray curr) |
long |
lvProducerIndex() |
private E |
newBufferPeek(java.util.concurrent.atomic.AtomicReferenceArray<E> buffer,
long index) |
private E |
newBufferPoll(java.util.concurrent.atomic.AtomicReferenceArray<E> buffer,
long index) |
private int |
nextArrayOffset(java.util.concurrent.atomic.AtomicReferenceArray<E> curr) |
boolean |
offer(E e) |
protected abstract boolean |
offerColdPath(java.util.concurrent.atomic.AtomicReferenceArray<E> buffer,
long mask,
E e,
long pIndex,
int offset) |
E |
peek() |
E |
poll() |
int |
size() |
protected void |
soConsumerIndex(long v) |
private void |
soElement(java.util.concurrent.atomic.AtomicReferenceArray curr,
int i,
java.lang.Object e) |
protected void |
soNext(java.util.concurrent.atomic.AtomicReferenceArray<E> curr,
java.util.concurrent.atomic.AtomicReferenceArray<E> next) |
protected void |
soProducerIndex(long v) |
java.lang.String |
toString() |
protected void |
writeToQueue(java.util.concurrent.atomic.AtomicReferenceArray<E> buffer,
E e,
long index,
int offset) |
contains, containsAll, remove, removeAll, retainAll, toArray, toArray
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
protected final void soProducerIndex(long v)
protected final void soConsumerIndex(long v)
public final long lvProducerIndex()
lvProducerIndex
in interface IndexedQueueSizeUtil.IndexedQueue
public final long lvConsumerIndex()
lvConsumerIndex
in interface IndexedQueueSizeUtil.IndexedQueue
protected static <E> java.util.concurrent.atomic.AtomicReferenceArray<E> allocate(int capacity)
public final java.util.Iterator<E> iterator()
public java.lang.String toString()
toString
in class java.util.AbstractCollection<E>
public long currentProducerIndex()
QueueProgressIndicators
currentProducerIndex
in interface QueueProgressIndicators
public long currentConsumerIndex()
QueueProgressIndicators
currentConsumerIndex
in interface QueueProgressIndicators
protected final void soNext(java.util.concurrent.atomic.AtomicReferenceArray<E> curr, java.util.concurrent.atomic.AtomicReferenceArray<E> next)
private void soElement(java.util.concurrent.atomic.AtomicReferenceArray curr, int i, java.lang.Object e)
protected final java.util.concurrent.atomic.AtomicReferenceArray<E> lvNextArrayAndUnlink(java.util.concurrent.atomic.AtomicReferenceArray curr)
private int nextArrayOffset(java.util.concurrent.atomic.AtomicReferenceArray<E> curr)
public boolean offer(E e)
This implementation is correct for single producer thread use only.
offer
in interface java.util.Queue<E>
protected abstract boolean offerColdPath(java.util.concurrent.atomic.AtomicReferenceArray<E> buffer, long mask, E e, long pIndex, int offset)
protected final void linkOldToNew(long currIndex, java.util.concurrent.atomic.AtomicReferenceArray<E> oldBuffer, int offset, java.util.concurrent.atomic.AtomicReferenceArray<E> newBuffer, int offsetInNew, E e)
protected final void writeToQueue(java.util.concurrent.atomic.AtomicReferenceArray<E> buffer, E e, long index, int offset)
public E poll()
This implementation is correct for single consumer thread use only.
poll
in interface java.util.Queue<E>
protected E lvElement(java.util.concurrent.atomic.AtomicReferenceArray<E> buffer, int offset)
protected static int calcElementOffset(long index, long mask)
public E peek()
This implementation is correct for single consumer thread use only.
peek
in interface java.util.Queue<E>
private E newBufferPeek(java.util.concurrent.atomic.AtomicReferenceArray<E> buffer, long index)
private E newBufferPoll(java.util.concurrent.atomic.AtomicReferenceArray<E> buffer, long index)
public final int size()