E - public final class SpscAtomicArrayQueue<E> extends AbstractQueue<E> implements QueueProgressIndicators
This implementation is a mashup of the Fast Flow
algorithm with an optimization of the offer method taken from the BQueue algorithm (a variation on Fast
Flow), and adjusted to comply with Queue.offer semantics with regards to capacity.
For convenience the relevant papers are available in the resources folder:
2010 - Pisa - SPSC Queues on Shared Cache Multi-Core Systems.pdf
2012 - Junchang- BQueue- Efficient and Practical Queuing.pdf
This implementation is wait free.
| Modifier and Type | Field and Description |
|---|---|
protected AtomicReferenceArray<E> |
buffer |
protected int |
mask |
protected long |
producerLookAhead |
| Constructor and Description |
|---|
SpscAtomicArrayQueue(int capacity) |
| Modifier and Type | Method and Description |
|---|---|
protected int |
calcElementOffset(long index) |
protected int |
calcElementOffset(long index,
int mask) |
void |
clear() |
long |
currentConsumerIndex()
This method has no concurrent visibility semantics.
|
long |
currentProducerIndex()
This method has no concurrent visibility semantics.
|
Iterator<E> |
iterator() |
protected E |
lpElement(AtomicReferenceArray<E> buffer,
int offset) |
protected E |
lpElement(int offset) |
protected E |
lvElement(AtomicReferenceArray<E> buffer,
int offset) |
protected E |
lvElement(int offset) |
boolean |
offer(E e) |
E |
peek() |
E |
poll() |
int |
size() |
protected void |
soElement(AtomicReferenceArray<E> buffer,
int offset,
E value) |
protected void |
soElement(int offset,
E value) |
protected void |
spElement(AtomicReferenceArray<E> buffer,
int offset,
E value) |
protected void |
spElement(int offset,
E value) |
protected void |
svElement(AtomicReferenceArray<E> buffer,
int offset,
E value) |
add, addAll, element, removecontains, containsAll, isEmpty, remove, removeAll, retainAll, toArray, toArray, toStringclone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitcontains, containsAll, equals, hashCode, isEmpty, parallelStream, remove, removeAll, removeIf, retainAll, spliterator, stream, toArray, toArrayprotected long producerLookAhead
protected final AtomicReferenceArray<E> buffer
protected final int mask
public int size()
size in interface Collection<E>size in class AbstractCollection<E>public long currentProducerIndex()
QueueProgressIndicatorscurrentProducerIndex in interface QueueProgressIndicatorspublic long currentConsumerIndex()
QueueProgressIndicatorscurrentConsumerIndex in interface QueueProgressIndicatorspublic Iterator<E> iterator()
iterator in interface Iterable<E>iterator in interface Collection<E>iterator in class AbstractCollection<E>public void clear()
clear in interface Collection<E>clear in class AbstractQueue<E>protected final int calcElementOffset(long index,
int mask)
protected final int calcElementOffset(long index)
protected final E lvElement(AtomicReferenceArray<E> buffer, int offset)
protected final E lpElement(AtomicReferenceArray<E> buffer, int offset)
protected final E lpElement(int offset)
protected final void spElement(AtomicReferenceArray<E> buffer, int offset, E value)
protected final void spElement(int offset,
E value)
protected final void soElement(AtomicReferenceArray<E> buffer, int offset, E value)
protected final void soElement(int offset,
E value)
protected final void svElement(AtomicReferenceArray<E> buffer, int offset, E value)
protected final E lvElement(int offset)
Copyright © 2013–2016. All rights reserved.