Class SerializedSubscriber<T>

  • Type Parameters:
    T - the value type
    All Implemented Interfaces:
    FlowableSubscriber<T>, org.reactivestreams.Subscriber<T>, org.reactivestreams.Subscription

    public final class SerializedSubscriber<T>
    extends java.lang.Object
    implements FlowableSubscriber<T>, org.reactivestreams.Subscription
    Serializes access to the Subscriber.onNext(Object), Subscriber.onError(Throwable) and Subscriber.onComplete() methods of another Subscriber.

    Note that onSubscribe(Subscription) is not serialized in respect of the other methods so make sure the onSubscribe is called with a non-null Subscription before any of the other methods are called.

    The implementation assumes that the actual Subscriber's methods don't throw.

    • Constructor Summary

      Constructors 
      Constructor Description
      SerializedSubscriber​(@NonNull org.reactivestreams.Subscriber<? super T> actual, boolean delayError)
      Construct a SerializedSubscriber by wrapping the given actual Subscriber and optionally delaying the errors till all regular values have been emitted from the internal buffer.
      SerializedSubscriber​(org.reactivestreams.Subscriber<? super T> downstream)
      Construct a SerializedSubscriber by wrapping the given actual Subscriber.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void cancel()  
      (package private) void emitLoop()  
      void onComplete()  
      void onError​(java.lang.Throwable t)  
      void onNext​(T t)  
      void onSubscribe​(@NonNull org.reactivestreams.Subscription s)
      Implementors of this method should make sure everything that needs to be visible in Subscriber.onNext(Object) is established before calling Subscription.request(long).
      void request​(long n)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • downstream

        final org.reactivestreams.Subscriber<? super T> downstream
      • delayError

        final boolean delayError
      • upstream

        org.reactivestreams.Subscription upstream
      • emitting

        boolean emitting
      • done

        volatile boolean done
    • Constructor Detail

      • SerializedSubscriber

        public SerializedSubscriber​(org.reactivestreams.Subscriber<? super T> downstream)
        Construct a SerializedSubscriber by wrapping the given actual Subscriber.
        Parameters:
        downstream - the actual Subscriber, not null (not verified)
      • SerializedSubscriber

        public SerializedSubscriber​(@NonNull
                                    @NonNull org.reactivestreams.Subscriber<? super T> actual,
                                    boolean delayError)
        Construct a SerializedSubscriber by wrapping the given actual Subscriber and optionally delaying the errors till all regular values have been emitted from the internal buffer.
        Parameters:
        actual - the actual Subscriber, not null (not verified)
        delayError - if true, errors are emitted after regular values have been emitted
    • Method Detail

      • onSubscribe

        public void onSubscribe​(@NonNull
                                @NonNull org.reactivestreams.Subscription s)
        Description copied from interface: FlowableSubscriber
        Implementors of this method should make sure everything that needs to be visible in Subscriber.onNext(Object) is established before calling Subscription.request(long). In practice this means no initialization should happen after the request() call and additional behavior is thread safe in respect to onNext.
        Specified by:
        onSubscribe in interface FlowableSubscriber<T>
        Specified by:
        onSubscribe in interface org.reactivestreams.Subscriber<T>
      • onNext

        public void onNext​(@NonNull
                           T t)
        Specified by:
        onNext in interface org.reactivestreams.Subscriber<T>
      • onError

        public void onError​(java.lang.Throwable t)
        Specified by:
        onError in interface org.reactivestreams.Subscriber<T>
      • onComplete

        public void onComplete()
        Specified by:
        onComplete in interface org.reactivestreams.Subscriber<T>
      • emitLoop

        void emitLoop()
      • request

        public void request​(long n)
        Specified by:
        request in interface org.reactivestreams.Subscription
      • cancel

        public void cancel()
        Specified by:
        cancel in interface org.reactivestreams.Subscription