Class QueuedValueProducer<T>

java.lang.Object
java.lang.Number
java.util.concurrent.atomic.AtomicLong
rx.internal.producers.QueuedValueProducer<T>
Type Parameters:
T - the value type
All Implemented Interfaces:
Serializable, Producer

public final class QueuedValueProducer<T> extends AtomicLong implements Producer
Producer that holds an unbounded (or custom) queue to enqueue values and relays them to a child subscriber on request.
See Also:
  • Field Details

  • Constructor Details

    • QueuedValueProducer

      public QueuedValueProducer(Subscriber<? super T> child)
      Constructs an instance with the target child subscriber and an Spsc Linked (Atomic) Queue as the queue implementation.
      Parameters:
      child - the target child subscriber
    • QueuedValueProducer

      public QueuedValueProducer(Subscriber<? super T> child, Queue<Object> queue)
      Constructs an instance with the target child subscriber and a custom queue implementation
      Parameters:
      child - the target child subscriber
      queue - the queue to use
  • Method Details

    • request

      public void request(long n)
      Description copied from interface: Producer
      Request a certain maximum number of items from this Producer. This is a way of requesting backpressure. To disable backpressure, pass Long.MAX_VALUE to this method.

      Requests are additive but if a sequence of requests totals more than Long.MAX_VALUE then Long.MAX_VALUE requests will be actioned and the extras may be ignored. Arriving at Long.MAX_VALUE by addition of requests cannot be assumed to disable backpressure. For example, the code below may result in Long.MAX_VALUE requests being actioned only.

       request(100);
       request(Long.MAX_VALUE-1);
       
      Specified by:
      request in interface Producer
      Parameters:
      n - the maximum number of items you want this Producer to produce, or Long.MAX_VALUE if you want the Producer to produce items at its own pace
    • offer

      public boolean offer(T value)
      Offers a value to this producer and tries to emit any queued values if the child requests allow it.
      Parameters:
      value - the value to enqueue and attempt to drain
      Returns:
      true if the queue accepted the offer, false otherwise
    • drain

      private void drain()