Class AtomicReferenceArrayQueue<E>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractQueue<E>
org.jctools.queues.atomic.AtomicReferenceArrayQueue<E>
All Implemented Interfaces:
Iterable<E>, Collection<E>, Queue<E>, IndexedQueueSizeUtil.IndexedQueue, MessagePassingQueue<E>, QueueProgressIndicators, SupportsIterator
Direct Known Subclasses:
MpscAtomicArrayQueueL1Pad, SequencedAtomicReferenceArrayQueue, SpmcAtomicArrayQueueL1Pad, SpscAtomicArrayQueueColdField

abstract class AtomicReferenceArrayQueue<E> extends AbstractQueue<E> implements IndexedQueueSizeUtil.IndexedQueue, QueueProgressIndicators, MessagePassingQueue<E>, SupportsIterator
  • Field Details

  • Constructor Details

    • AtomicReferenceArrayQueue

      public AtomicReferenceArrayQueue(int capacity)
  • Method Details

    • toString

      public String toString()
      Overrides:
      toString in class AbstractCollection<E>
    • clear

      public void clear()
      Description copied from interface: MessagePassingQueue
      Removes all items from the queue. Called from the consumer thread subject to the restrictions appropriate to the implementation and according to the Collection.clear() interface.
      Specified by:
      clear in interface Collection<E>
      Specified by:
      clear in interface MessagePassingQueue<E>
      Overrides:
      clear in class AbstractQueue<E>
    • capacity

      public final int capacity()
      Specified by:
      capacity in interface IndexedQueueSizeUtil.IndexedQueue
      Specified by:
      capacity in interface MessagePassingQueue<E>
      Returns:
      the capacity of this queue or MessagePassingQueue.UNBOUNDED_CAPACITY if not bounded
    • size

      public final int size()
      This method's accuracy is subject to concurrent modifications happening as the size is estimated and as such is a best effort rather than absolute value. For some implementations this method may be O(n) rather than O(1).

      Specified by:
      size in interface Collection<E>
      Specified by:
      size in interface MessagePassingQueue<E>
      Specified by:
      size in class AbstractCollection<E>
      Returns:
      number of messages in the queue, between 0 and Integer.MAX_VALUE but less or equals to capacity (if bounded).
    • isEmpty

      public final boolean isEmpty()
      Description copied from interface: MessagePassingQueue
      This method's accuracy is subject to concurrent modifications happening as the observation is carried out.
      Specified by:
      isEmpty in interface Collection<E>
      Specified by:
      isEmpty in interface MessagePassingQueue<E>
      Overrides:
      isEmpty in class AbstractCollection<E>
      Returns:
      true if empty, false otherwise
    • currentProducerIndex

      public final long currentProducerIndex()
      Description copied from interface: QueueProgressIndicators
      This method has no concurrent visibility semantics. The value returned may be negative. Under normal circumstances 2 consecutive calls to this method can offer an idea of progress made by producer threads by subtracting the 2 results though in extreme cases (if producers have progressed by more than 2^64) this may also fail.
      This value will normally indicate number of elements passed into the queue, but may under some circumstances be a derivative of that figure. This method should not be used to derive size or emptiness.
      Specified by:
      currentProducerIndex in interface QueueProgressIndicators
      Returns:
      the current value of the producer progress index
    • currentConsumerIndex

      public final long currentConsumerIndex()
      Description copied from interface: QueueProgressIndicators
      This method has no concurrent visibility semantics. The value returned may be negative. Under normal circumstances 2 consecutive calls to this method can offer an idea of progress made by consumer threads by subtracting the 2 results though in extreme cases (if consumers have progressed by more than 2^64) this may also fail.
      This value will normally indicate number of elements taken out of the queue, but may under some circumstances be a derivative of that figure. This method should not be used to derive size or emptiness.
      Specified by:
      currentConsumerIndex in interface QueueProgressIndicators
      Returns:
      the current value of the consumer progress index
    • iterator

      public final Iterator<E> iterator()
      Get an iterator for this queue. This method is thread safe.

      The iterator provides a best-effort snapshot of the elements in the queue. The returned iterator is not guaranteed to return elements in queue order, and races with the consumer thread may cause gaps in the sequence of returned elements. Like {link #relaxedPoll}, the iterator may not immediately return newly inserted elements.

      Specified by:
      iterator in interface Collection<E>
      Specified by:
      iterator in interface Iterable<E>
      Specified by:
      iterator in class AbstractCollection<E>
      Returns:
      The iterator.