Class ProducerObserverArbiter<T>

  • Type Parameters:
    T - the value type
    All Implemented Interfaces:
    Observer<T>, Producer

    public final class ProducerObserverArbiter<T>
    extends java.lang.Object
    implements Producer, Observer<T>
    Producer that serializes any event emission with requesting and producer changes.

    The implementation shortcuts on error and overwrites producers that got delayed, similar to ProducerArbiter.

    • Field Detail

      • emitting

        boolean emitting
      • queue

        java.util.List<T> queue
      • currentProducer

        Producer currentProducer
      • requested

        long requested
      • missedRequested

        long missedRequested
      • missedProducer

        Producer missedProducer
      • missedTerminal

        java.lang.Object missedTerminal
      • hasError

        volatile boolean hasError
      • NULL_PRODUCER

        static final Producer NULL_PRODUCER
    • Constructor Detail

      • ProducerObserverArbiter

        public ProducerObserverArbiter​(Subscriber<? super T> child)
    • 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
      • setProducer

        public void setProducer​(Producer p)
      • emitLoop

        void emitLoop()