public class MpmcUnboundedXaddArrayQueue<E> extends MpUnboundedXaddArrayQueue<MpmcUnboundedXaddChunk<E>,E>
MpmcArrayQueue it is designed to provide a better scaling when more
producers are concurrently offering.poll() could spin while awaiting a new element to be available:
to avoid this behaviour relaxedPoll() should be used instead, accounting for the semantic differences
between the twos.MessagePassingQueue.Consumer<T>, MessagePassingQueue.ExitCondition, MessagePassingQueue.Supplier<T>, MessagePassingQueue.WaitStrategychunkMask, chunkShift, freeChunksPool, maxPooledChunksb000, b001, b002, b003, b004, b005, b006, b007, b010, b011, b012, b013, b014, b015, b016, b017, b020, b021, b022, b023, b024, b025, b026, b027, b030, b031, b032, b033, b034, b035, b036, b037, b040, b041, b042, b043, b044, b045, b046, b047, b050, b051, b052, b053, b054, b055, b056, b057, b060, b061, b062, b063, b064, b065, b066, b067, b070, b071, b072, b073, b074, b075, b076, b077, b100, b101, b102, b103, b104, b105, b106, b107, b110, b111, b112, b113, b114, b115, b116, b117, b120, b121, b122, b123, b124, b125, b126, b127, b130, b131, b132, b133, b134, b135, b136, b137, b140, b141, b142, b143, b144, b145, b146, b147, b150, b151, b152, b153, b154, b155, b156, b157, b160, b161, b162, b163, b164, b165, b166, b167b170, b171, b172, b173, b174, b175, b176, b177UNBOUNDED_CAPACITY| Constructor and Description |
|---|
MpmcUnboundedXaddArrayQueue(int chunkSize) |
MpmcUnboundedXaddArrayQueue(int chunkSize,
int maxPooledChunks) |
| Modifier and Type | Method and Description |
|---|---|
int |
fill(MessagePassingQueue.Supplier<E> s,
int limit)
Stuff the queue with up to limit elements from the supplier.
|
(package private) MpmcUnboundedXaddChunk<E> |
newChunk(long index,
MpmcUnboundedXaddChunk<E> prev,
int chunkSize,
boolean pooled) |
boolean |
offer(E e)
Called from a producer thread subject to the restrictions appropriate to the implementation and
according to the
Queue.offer(Object) interface. |
E |
peek()
Called from the consumer thread subject to the restrictions appropriate to the implementation and
according to the
Queue.peek() interface. |
E |
poll()
Called from the consumer thread subject to the restrictions appropriate to the implementation and
according to the
Queue.poll() interface. |
E |
relaxedPeek()
Called from the consumer thread subject to the restrictions appropriate to the implementation.
|
E |
relaxedPoll()
Called from the consumer thread subject to the restrictions appropriate to the implementation.
|
private E |
switchToNextConsumerChunkAndPoll(MpmcUnboundedXaddChunk<E> cChunk,
MpmcUnboundedXaddChunk<E> next,
long expectedChunkIndex) |
appendNextChunks, capacity, chunkSize, currentConsumerIndex, currentProducerIndex, drain, drain, drain, fill, fill, isEmpty, iterator, maxPooledChunks, moveToNextConsumerChunk, producerChunkForIndex, relaxedOffer, size, toStringcasConsumerIndex, lpConsumerChunk, lpConsumerIndex, lvConsumerChunk, lvConsumerIndex, soConsumerChunk, soConsumerIndexcasProducerChunkIndex, lvProducerChunk, lvProducerChunkIndex, soProducerChunk, soProducerChunkIndexgetAndAddProducerIndex, getAndIncrementProducerIndex, lvProducerIndexcontains, containsAll, remove, removeAll, retainAll, toArray, toArrayclone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitclearpublic MpmcUnboundedXaddArrayQueue(int chunkSize,
int maxPooledChunks)
chunkSize - The buffer size to be used in each chunk of this queuemaxPooledChunks - The maximum number of reused chunks kept around to avoid allocation, chunks are pre-allocatedpublic MpmcUnboundedXaddArrayQueue(int chunkSize)
final MpmcUnboundedXaddChunk<E> newChunk(long index, MpmcUnboundedXaddChunk<E> prev, int chunkSize, boolean pooled)
newChunk in class MpUnboundedXaddArrayQueue<MpmcUnboundedXaddChunk<E>,E>public boolean offer(E e)
MessagePassingQueueQueue.offer(Object) interface.e - not null, will throw NPE if it ispublic E poll()
MessagePassingQueueQueue.poll() interface.null iff emptyprivate E switchToNextConsumerChunkAndPoll(MpmcUnboundedXaddChunk<E> cChunk, MpmcUnboundedXaddChunk<E> next, long expectedChunkIndex)
public E peek()
MessagePassingQueueQueue.peek() interface.null iff emptypublic E relaxedPoll()
MessagePassingQueueQueue.poll() this method may return null without the queue being empty.null if unable to pollpublic E relaxedPeek()
MessagePassingQueueQueue.peek() this method may return null without the queue being empty.null if unable to peekpublic int fill(MessagePassingQueue.Supplier<E> s, int limit)
MessagePassingQueue
for(int i=0; i < limit && relaxedOffer(s.get()); i++);
There's no strong commitment to the queue being full at the end of a fill. Called from a producer
thread subject to the restrictions appropriate to the implementation.
WARNING: Explicit assumptions are made with regards to MessagePassingQueue.Supplier.get() make sure you have read
and understood these before using this method.