public class SerializedSubject<T,R> extends Subject<T,R>
Subject
so that it is safe to call its various on
methods from different threads.
When you use an ordinary Subject
as a Subscriber
, you must take care not to call its
Observer.onNext(T)
method (or its other on
methods) from multiple threads, as this could lead
to non-serialized calls, which violates the Observable contract and creates an ambiguity in the resulting
Subject.
To protect a Subject
from this danger, you can convert it into a SerializedSubject
with code
like the following:
mySafeSubject = new SerializedSubject( myUnsafeSubject );
Observable.OnSubscribe<T>, Observable.Operator<R,T>, Observable.Transformer<T,R>
Constructor and Description |
---|
SerializedSubject(Subject<T,R> actual) |
Modifier and Type | Method and Description |
---|---|
Throwable |
getThrowable()
Returns the Throwable that terminated the Subject.
|
T |
getValue()
Returns the current or latest value of the Subject if there is such a value and
the subject hasn't terminated with an exception.
|
Object[] |
getValues()
Returns a snapshot of the currently buffered non-terminal events.
|
T[] |
getValues(T[] a)
Returns a snapshot of the currently buffered non-terminal events into
the provided
a array or creates a new array if it has not enough capacity. |
boolean |
hasCompleted()
Check if the Subject has terminated normally.
|
boolean |
hasObservers()
|
boolean |
hasThrowable()
Check if the Subject has terminated with an exception.
|
boolean |
hasValue()
Check if the Subject has any value.
|
void |
onCompleted()
Notifies the Observer that the
Observable has finished sending push-based notifications. |
void |
onError(Throwable e)
Notifies the Observer that the
Observable has experienced an error condition. |
void |
onNext(T t)
Provides the Observer with a new item to observe.
|
toSerialized
all, amb, amb, amb, amb, amb, amb, amb, amb, amb, ambWith, asObservable, buffer, buffer, buffer, buffer, buffer, buffer, buffer, buffer, buffer, buffer, buffer, buffer, cache, cache, cast, collect, combineLatest, combineLatest, combineLatest, combineLatest, combineLatest, combineLatest, combineLatest, combineLatest, combineLatest, compose, concat, concat, concat, concat, concat, concat, concat, concat, concat, concatMap, concatWith, contains, count, countLong, create, debounce, debounce, debounce, defaultIfEmpty, defer, delay, delay, delay, delay, delaySubscription, delaySubscription, delaySubscription, dematerialize, distinct, distinct, distinctUntilChanged, distinctUntilChanged, doOnCompleted, doOnEach, doOnEach, doOnError, doOnNext, doOnRequest, doOnSubscribe, doOnTerminate, doOnUnsubscribe, elementAt, elementAtOrDefault, empty, error, exists, filter, finallyDo, first, first, firstOrDefault, firstOrDefault, flatMap, flatMap, flatMap, flatMap, flatMap, flatMap, flatMapIterable, flatMapIterable, forEach, forEach, forEach, from, from, from, from, from, groupBy, groupBy, groupJoin, ignoreElements, interval, interval, interval, interval, isEmpty, join, just, just, just, just, just, just, just, just, just, just, last, last, lastOrDefault, lastOrDefault, lift, limit, map, materialize, merge, merge, merge, merge, merge, merge, merge, merge, merge, merge, merge, merge, merge, merge, mergeDelayError, mergeDelayError, mergeDelayError, mergeDelayError, mergeDelayError, mergeDelayError, mergeDelayError, mergeDelayError, mergeDelayError, mergeDelayError, mergeWith, nest, never, observeOn, ofType, onBackpressureBlock, onBackpressureBlock, onBackpressureBuffer, onBackpressureBuffer, onBackpressureBuffer, onBackpressureDrop, onBackpressureDrop, onBackpressureLatest, onErrorResumeNext, onErrorResumeNext, onErrorReturn, onExceptionResumeNext, publish, publish, range, range, reduce, reduce, repeat, repeat, repeat, repeat, repeatWhen, repeatWhen, replay, replay, replay, replay, replay, replay, replay, replay, replay, replay, replay, replay, replay, replay, replay, replay, retry, retry, retry, retryWhen, retryWhen, sample, sample, sample, scan, scan, sequenceEqual, sequenceEqual, serialize, share, single, single, singleOrDefault, singleOrDefault, skip, skip, skip, skipLast, skipLast, skipLast, skipUntil, skipWhile, startWith, startWith, startWith, startWith, startWith, startWith, startWith, startWith, startWith, startWith, startWith, subscribe, subscribe, subscribe, subscribe, subscribe, subscribe, subscribeOn, switchIfEmpty, switchMap, switchOnNext, take, take, take, takeFirst, takeLast, takeLast, takeLast, takeLast, takeLast, takeLastBuffer, takeLastBuffer, takeLastBuffer, takeLastBuffer, takeLastBuffer, takeUntil, takeUntil, takeWhile, throttleFirst, throttleFirst, throttleLast, throttleLast, throttleWithTimeout, throttleWithTimeout, timeInterval, timeInterval, timeout, timeout, timeout, timeout, timeout, timeout, timeout, timeout, timer, timer, timer, timer, timestamp, timestamp, toBlocking, toList, toMap, toMap, toMap, toMultimap, toMultimap, toMultimap, toMultimap, toSingle, toSortedList, toSortedList, toSortedList, toSortedList, unsafeSubscribe, unsubscribeOn, using, using, window, window, window, window, window, window, window, window, window, window, window, window, withLatestFrom, zip, zip, zip, zip, zip, zip, zip, zip, zip, zip, zipWith, zipWith
public void onCompleted()
Observer
Observable
has finished sending push-based notifications.
The Observable
will not call this method if it calls Observer.onError(java.lang.Throwable)
.
public void onError(Throwable e)
Observer
Observable
has experienced an error condition.
If the Observable
calls this method, it will not thereafter call Observer.onNext(T)
or
Observer.onCompleted()
.
e
- the exception encountered by the Observablepublic void onNext(T t)
Observer
The Observable
may call this method 0 or more times.
The Observable
will not call this method again after it calls either Observer.onCompleted()
or
Observer.onError(java.lang.Throwable)
.
t
- the item emitted by the Observablepublic boolean hasObservers()
Subject
hasObservers
in class Subject<T,R>
@Experimental public boolean hasCompleted()
Subject
The operation is threadsafe.
hasCompleted
in class Subject<T,R>
true
if the subject completed normally via onCompleted
@Experimental public boolean hasThrowable()
Subject
The operation is threadsafe.
hasThrowable
in class Subject<T,R>
true
if the subject has received a throwable through onError
.@Experimental public boolean hasValue()
Subject
Use the Subject.getValue()
method to retrieve such a value.
Note that unless Subject.hasCompleted()
or Subject.hasThrowable()
returns true, the value
retrieved by getValue()
may get outdated.
The operation is threadsafe.
@Experimental public Throwable getThrowable()
Subject
The operation is threadsafe.
getThrowable
in class Subject<T,R>
null
if the subject hasn't terminated yet or
if it terminated normally.@Experimental public T getValue()
Subject
The method can return null
for various reasons. Use Subject.hasValue()
, Subject.hasThrowable()
and Subject.hasCompleted()
to determine if such null
is a valid value, there was an
exception or the Subject terminated without receiving any value.
The operation is threadsafe.
@Experimental public Object[] getValues()
Subject
The operation is threadsafe.
@Experimental public T[] getValues(T[] a)
Subject
a
array or creates a new array if it has not enough capacity.
If the subject's values fit in the specified array with room to spare
(i.e., the array has more elements than the list), the element in
the array immediately following the end of the subject's values is set to
null
.
The operation is threadsafe.
Copyright © 2015. All Rights Reserved.