Class UnicastSubject.State<T>
- Type Parameters:
T
- the value type
- All Implemented Interfaces:
Serializable
,Action
,Action1<Subscriber<? super T>>
,Function
,Observable.OnSubscribe<T>
,Observer<T>
,Producer
,Subscription
- Enclosing class:
UnicastSubject<T>
-
Field Summary
FieldsModifier and TypeFieldDescription(package private) boolean
Indicates the queue can be bypassed because the child has caught up with the replay.(package private) boolean
Indicates the source has terminated.(package private) boolean
Emitter loop: emitting indicator.(package private) Throwable
In case the source emitted an error.(package private) boolean
Emitter loop: missed emission indicator.(package private) final NotificationLite
<T> JCTools queues don't accept nulls.The queue holding values until the subscriber arrives and catches up.private static final long
(package private) final AtomicReference
<Subscriber<? super T>> The single subscriber.(package private) final AtomicReference
<Action0> Atomically set to true on terminal condition. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
call
(Subscriber<? super T> subscriber) Tries to set the given subscriber if not already set, sending an IllegalStateException to the subscriber otherwise.(package private) boolean
checkTerminated
(boolean done, boolean empty, Subscriber<? super T> s) Checks if one of the terminal conditions have been met: child unsubscribed, an error happened or the source terminated and the queue is empty(package private) void
Call the optional termination action at most once.boolean
Indicates whether thisSubscription
is currently unsubscribed.void
Notifies the Observer that theObservable
has finished sending push-based notifications.void
Notifies the Observer that theObservable
has experienced an error condition.void
Provides the Observer with a new item to observe.(package private) void
replay()
Tries to replay the contents of the queue.void
request
(long n) Request a certain maximum number of items from this Producer.void
Terminates the state by setting the done flag and tries to clear the queue.Methods inherited from class java.util.concurrent.atomic.AtomicLong
accumulateAndGet, addAndGet, compareAndExchange, compareAndExchangeAcquire, compareAndExchangeRelease, compareAndSet, decrementAndGet, doubleValue, floatValue, get, getAcquire, getAndAccumulate, getAndAdd, getAndDecrement, getAndIncrement, getAndSet, getAndUpdate, getOpaque, getPlain, incrementAndGet, intValue, lazySet, longValue, set, setOpaque, setPlain, setRelease, toString, updateAndGet, weakCompareAndSet, weakCompareAndSetAcquire, weakCompareAndSetPlain, weakCompareAndSetRelease, weakCompareAndSetVolatile
Methods inherited from class java.lang.Number
byteValue, shortValue
-
Field Details
-
serialVersionUID
private static final long serialVersionUID- See Also:
-
subscriber
The single subscriber. -
queue
The queue holding values until the subscriber arrives and catches up. -
nl
JCTools queues don't accept nulls. -
terminateOnce
Atomically set to true on terminal condition. -
error
Throwable errorIn case the source emitted an error. -
done
volatile boolean doneIndicates the source has terminated. -
emitting
boolean emittingEmitter loop: emitting indicator. Guarded by this. -
missed
boolean missedEmitter loop: missed emission indicator. Guarded by this. -
caughtUp
volatile boolean caughtUpIndicates the queue can be bypassed because the child has caught up with the replay.
-
-
Constructor Details
-
State
Constructor.- Parameters:
capacityHint
- indicates how large each island in the Spsc queue should be to reduce allocation frequencyonTerminated
- the action to call when the subject reaches its terminal state or the single subscriber unsubscribes.
-
-
Method Details
-
onNext
Description copied from interface:Observer
Provides the Observer with a new item to observe.The
Observable
may call this method 0 or more times.The
Observable
will not call this method again after it calls eitherObserver.onCompleted()
orObserver.onError(java.lang.Throwable)
. -
onError
Description copied from interface:Observer
Notifies the Observer that theObservable
has experienced an error condition.If the
Observable
calls this method, it will not thereafter callObserver.onNext(T)
orObserver.onCompleted()
. -
onCompleted
public void onCompleted()Description copied from interface:Observer
Notifies the Observer that theObservable
has finished sending push-based notifications.The
Observable
will not call this method if it callsObserver.onError(java.lang.Throwable)
.- Specified by:
onCompleted
in interfaceObserver<T>
-
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, passLong.MAX_VALUE
to this method.Requests are additive but if a sequence of requests totals more than
Long.MAX_VALUE
thenLong.MAX_VALUE
requests will be actioned and the extras may be ignored. Arriving atLong.MAX_VALUE
by addition of requests cannot be assumed to disable backpressure. For example, the code below may result inLong.MAX_VALUE
requests being actioned only.request(100); request(Long.MAX_VALUE-1);
-
call
Tries to set the given subscriber if not already set, sending an IllegalStateException to the subscriber otherwise. -
replay
void replay()Tries to replay the contents of the queue. -
unsubscribe
public void unsubscribe()Terminates the state by setting the done flag and tries to clear the queue. Should be called only when the child unsubscribes- Specified by:
unsubscribe
in interfaceSubscription
-
isUnsubscribed
public boolean isUnsubscribed()Description copied from interface:Subscription
Indicates whether thisSubscription
is currently unsubscribed.- Specified by:
isUnsubscribed
in interfaceSubscription
- Returns:
true
if thisSubscription
is currently unsubscribed,false
otherwise
-
checkTerminated
Checks if one of the terminal conditions have been met: child unsubscribed, an error happened or the source terminated and the queue is empty- Parameters:
done
-empty
-s
-- Returns:
-
doTerminate
void doTerminate()Call the optional termination action at most once.
-