Class SpscLinkedArrayQueue<T>

java.lang.Object
io.reactivex.rxjava4.operators.SpscLinkedArrayQueue<T>
Type Parameters:
T - the contained value type
All Implemented Interfaces:
SimplePlainQueue<T>, SimpleQueue<T>

public final class SpscLinkedArrayQueue<T> extends Object implements SimplePlainQueue<T>
A single-producer single-consumer array-backed queue which can allocate new arrays in case the consumer is slower than the producer.
Since:
3.1.1
  • Constructor Summary

    Constructors
    Constructor
    Description
    SpscLinkedArrayQueue(int bufferSize)
    Constructs a linked array-based queue instance with the given island size rounded up to the next power of 2.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    Removes all enqueued items from this queue.
    boolean
    Returns true if the queue is empty.
    boolean
    offer(T e)
    Atomically enqueue a single value.
    boolean
    offer(T first, T second)
    Offer two elements at the same time.
    Returns the next element in this queue without removing it or null if this queue is empty
    Tries to dequeue a value (non-null) or returns null if the queue is empty.
    int
    Returns the number of elements in the queue.

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • SpscLinkedArrayQueue

      public SpscLinkedArrayQueue(int bufferSize)
      Constructs a linked array-based queue instance with the given island size rounded up to the next power of 2.
      Parameters:
      bufferSize - the maximum number of elements per island
  • Method Details

    • offer

      public boolean offer(T e)
      Atomically enqueue a single value.

      This implementation is correct for single producer thread use only.

      Specified by:
      offer in interface SimpleQueue<T>
      Parameters:
      e - the value to enqueue, not null
      Returns:
      true if successful, false if the value was not enqueued likely due to reaching the queue capacity)
    • poll

      @Nullable public T poll()
      Tries to dequeue a value (non-null) or returns null if the queue is empty.

      If the producer uses SimpleQueue.offer(Object, Object) and when polling in pairs, if the first poll() returns a non-null item, the second poll() is guaranteed to return a non-null item as well.

      This implementation is correct for single consumer thread use only.

      Specified by:
      poll in interface SimplePlainQueue<T>
      Specified by:
      poll in interface SimpleQueue<T>
      Returns:
      the item or null to indicate an empty queue
    • peek

      @Nullable public T peek()
      Returns the next element in this queue without removing it or null if this queue is empty
      Returns:
      the next element or null
    • clear

      public void clear()
      Description copied from interface: SimpleQueue
      Removes all enqueued items from this queue.
      Specified by:
      clear in interface SimpleQueue<T>
    • size

      public int size()
      Returns the number of elements in the queue.
      Returns:
      the number of elements in the queue
    • isEmpty

      public boolean isEmpty()
      Description copied from interface: SimpleQueue
      Returns true if the queue is empty.

      Note however that due to potential fused functions in SimpleQueue.poll() it is possible this method returns false but then poll() returns null because the fused function swallowed the available item(s).

      Specified by:
      isEmpty in interface SimpleQueue<T>
      Returns:
      true if the queue is empty
    • offer

      public boolean offer(T first, T second)
      Offer two elements at the same time.

      Don't use the regular offer() with this at all!

      Specified by:
      offer in interface SimpleQueue<T>
      Parameters:
      first - the first value, not null
      second - the second value, not null
      Returns:
      true if the queue accepted the two new values