E - the type of elements held in this collectionpublic final class MPSCQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>
IdleStrategy so if there is nothing to take,
the thread can idle and eventually can do the more expensive blocking. The blocking is especially a concern for the putting
thread, because it needs to notify the blocked thread.
This MPSCQueue is based on 2 stacks; so the items are put in a reverse order by the putting thread, and by the taking thread they are reversed in order again so that the original ordering is restored. Using this approach, if there are multiple items on the stack, the owning thread can take them all using a single CAS. Once this is done, the owning thread can process them one by one and doesn't need to contend with the putting threads; reducing contention.
| Constructor and Description |
|---|
MPSCQueue(IdleStrategy idleStrategy)
Creates a new
MPSCQueue with the provided IdleStrategy. |
MPSCQueue(Thread consumerThread,
IdleStrategy idleStrategy)
Creates a new
MPSCQueue with the provided IdleStrategy and consumer thread. |
| Modifier and Type | Method and Description |
|---|---|
void |
clear()
.
|
int |
drainTo(Collection<? super E> c) |
int |
drainTo(Collection<? super E> c,
int maxElements) |
boolean |
isEmpty() |
Iterator<E> |
iterator() |
boolean |
offer(E item) |
boolean |
offer(E e,
long timeout,
TimeUnit unit) |
E |
peek() |
E |
poll() |
E |
poll(long timeout,
TimeUnit unit) |
void |
put(E e) |
int |
remainingCapacity() |
void |
setConsumerThread(Thread consumerThread)
Sets the consumer thread.
|
int |
size()
.
|
E |
take() |
add, addAll, element, removecontains, containsAll, remove, removeAll, retainAll, toArray, toArray, toStringclone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitadd, contains, removeaddAll, containsAll, equals, hashCode, parallelStream, removeAll, removeIf, retainAll, spliterator, stream, toArray, toArraypublic MPSCQueue(Thread consumerThread, IdleStrategy idleStrategy)
MPSCQueue with the provided IdleStrategy and consumer thread.consumerThread - the Thread that consumes the items.idleStrategy - the idleStrategy. If null, this consumer will block if the queue is empty.NullPointerException - when consumerThread is null.public MPSCQueue(IdleStrategy idleStrategy)
MPSCQueue with the provided IdleStrategy.idleStrategy - the idleStrategy. If null, the consumer will block.public void setConsumerThread(Thread consumerThread)
consumerThread - the consumer thread.NullPointerException - when consumerThread null.public void clear()
clear in interface Collection<E>clear in class AbstractQueue<E>public boolean offer(E item)
public E take() throws InterruptedException
take in interface BlockingQueue<E>InterruptedExceptionpublic int size()
size in interface Collection<E>size in class AbstractCollection<E>public boolean isEmpty()
isEmpty in interface Collection<E>isEmpty in class AbstractCollection<E>public void put(E e) throws InterruptedException
put in interface BlockingQueue<E>InterruptedExceptionpublic boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException
offer in interface BlockingQueue<E>InterruptedExceptionpublic E poll(long timeout, TimeUnit unit) throws InterruptedException
poll in interface BlockingQueue<E>InterruptedExceptionpublic int remainingCapacity()
remainingCapacity in interface BlockingQueue<E>public int drainTo(Collection<? super E> c)
drainTo in interface BlockingQueue<E>public int drainTo(Collection<? super E> c, int maxElements)
drainTo in interface BlockingQueue<E>Copyright © 2020 Hazelcast, Inc.. All Rights Reserved.