Class 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:
    Serialized Form
    • Constructor Detail

      • 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 Detail

      • 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 queud 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