Class UnicastAutoReleaseSubject<T>

java.lang.Object
rx.Observable<R>
rx.subjects.Subject<T,​T>
com.couchbase.client.core.utils.UnicastAutoReleaseSubject<T>
All Implemented Interfaces:
rx.Observer<T>

public final class UnicastAutoReleaseSubject<T>
extends rx.subjects.Subject<T,​T>
This Subject can be used to auto-release reference counted objects when not subscribed before. The implementation is originally based on a Subject in RxNetty, but adapted to fit the needs of the core. For example it does not always do auto releasing which is something that can clash with proper subscribers and as a result it never increases the reference count of the ref counted object. While this subject can also be used with non reference counted objects it doesn't make much sense since they can properly be garbage collected by the JVM and do not leak.
Since:
1.1.1
Author:
Nitesh Kant (Netflix), Michael Nitschinger
  • Nested Class Summary

    Nested classes/interfaces inherited from class rx.Observable

    rx.Observable.OnSubscribe<T extends Object>, rx.Observable.Operator<R extends Object,​T extends Object>, rx.Observable.Transformer<T extends Object,​R extends Object>
  • Method Summary

    Modifier and Type Method Description
    static <T> UnicastAutoReleaseSubject<T> create​(long noSubscriptionTimeout, TimeUnit timeUnit)  
    static <T> UnicastAutoReleaseSubject<T> create​(long noSubscriptionTimeout, TimeUnit timeUnit, rx.functions.Action0 onUnsubscribe)  
    static <T> UnicastAutoReleaseSubject<T> create​(long noSubscriptionTimeout, TimeUnit timeUnit, rx.Scheduler timeoutScheduler)  
    static <T> UnicastAutoReleaseSubject<T> create​(long noSubscriptionTimeout, TimeUnit timeUnit, rx.Scheduler timeoutScheduler, rx.functions.Action0 onUnsubscribe)  
    static <T> UnicastAutoReleaseSubject<T> createWithoutNoSubscriptionTimeout()
    Creates a new UnicastAutoReleaseSubject without a no subscription timeout.
    static <T> UnicastAutoReleaseSubject<T> createWithoutNoSubscriptionTimeout​(rx.functions.Action0 onUnsubscribe)
    Creates a new UnicastAutoReleaseSubject without a no subscription timeout.
    boolean disposeIfNotSubscribed()
    This will eagerly dispose this Subject without waiting for the no subscription timeout period, if configured.
    boolean hasObservers()  
    void onCompleted()  
    void onError​(Throwable e)  
    void onNext​(T t)  
    UnicastAutoReleaseSubject<T> withTraceIdentifier​(String id)  

    Methods inherited from class rx.subjects.Subject

    toSerialized

    Methods inherited from class rx.Observable

    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, cacheWithInitialCapacity, cast, collect, combineLatest, combineLatest, combineLatest, combineLatest, combineLatest, combineLatest, combineLatest, combineLatest, combineLatest, combineLatest, combineLatestDelayError, compose, concat, concat, concat, concat, concat, concat, concat, concat, concat, concat, concatDelayError, concatDelayError, concatDelayError, concatDelayError, concatDelayError, concatDelayError, concatDelayError, concatDelayError, concatDelayError, concatDelayError, concatEager, concatEager, concatEager, concatEager, concatEager, concatEager, concatEager, concatEager, concatEager, concatEager, concatEager, concatEager, concatMap, concatMapDelayError, concatMapEager, concatMapEager, concatMapEager, concatMapIterable, concatWith, contains, count, countLong, create, create, create, create, debounce, debounce, debounce, defaultIfEmpty, defer, delay, delay, delay, delay, delaySubscription, delaySubscription, delaySubscription, delaySubscription, dematerialize, distinct, distinct, distinctUntilChanged, distinctUntilChanged, distinctUntilChanged, doAfterTerminate, 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, flatMapCompletable, flatMapCompletable, flatMapCompletable, flatMapIterable, flatMapIterable, flatMapIterable, flatMapIterable, flatMapSingle, flatMapSingle, flatMapSingle, forEach, forEach, forEach, from, from, from, from, from, fromCallable, groupBy, groupBy, 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, mergeDelayError, mergeDelayError, mergeWith, nest, never, observeOn, observeOn, observeOn, observeOn, ofType, onBackpressureBuffer, onBackpressureBuffer, onBackpressureBuffer, onBackpressureBuffer, onBackpressureDrop, onBackpressureDrop, onBackpressureLatest, onErrorResumeNext, onErrorResumeNext, onErrorReturn, onExceptionResumeNext, onTerminateDetach, publish, publish, range, range, rebatchRequests, 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, sorted, sorted, startWith, startWith, startWith, startWith, startWith, startWith, startWith, startWith, startWith, startWith, startWith, subscribe, subscribe, subscribe, subscribe, subscribe, subscribe, subscribeOn, subscribeOn, switchIfEmpty, switchMap, switchMapDelayError, switchOnNext, switchOnNextDelayError, take, take, take, takeFirst, takeLast, takeLast, takeLast, takeLast, takeLast, takeLastBuffer, takeLastBuffer, takeLastBuffer, takeLastBuffer, takeLastBuffer, takeUntil, takeUntil, takeWhile, test, test, throttleFirst, throttleFirst, throttleLast, throttleLast, throttleWithTimeout, throttleWithTimeout, timeInterval, timeInterval, timeout, timeout, timeout, timeout, timeout, timeout, timeout, timeout, timer, timer, timer, timer, timestamp, timestamp, to, toBlocking, toCompletable, toList, toMap, toMap, toMap, toMultimap, toMultimap, toMultimap, toMultimap, toSingle, toSortedList, toSortedList, toSortedList, toSortedList, unsafeCreate, unsafeSubscribe, unsubscribeOn, using, using, window, window, window, window, window, window, window, window, window, window, window, window, withLatestFrom, withLatestFrom, withLatestFrom, withLatestFrom, withLatestFrom, withLatestFrom, withLatestFrom, withLatestFrom, withLatestFrom, withLatestFrom, zip, zip, zip, zip, zip, zip, zip, zip, zip, zip, zip, zipWith, zipWith

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Method Details

    • createWithoutNoSubscriptionTimeout

      public static <T> UnicastAutoReleaseSubject<T> createWithoutNoSubscriptionTimeout​(rx.functions.Action0 onUnsubscribe)
      Creates a new UnicastAutoReleaseSubject without a no subscription timeout. This can cause a memory leak in case no one ever subscribes to this subject. See UnicastAutoReleaseSubject for details.
      Type Parameters:
      T - The type emitted and received by this subject.
      Parameters:
      onUnsubscribe - An action to be invoked when the sole subscriber to this Subject unsubscribes.
      Returns:
      The new instance of UnicastAutoReleaseSubject
    • createWithoutNoSubscriptionTimeout

      public static <T> UnicastAutoReleaseSubject<T> createWithoutNoSubscriptionTimeout()
      Creates a new UnicastAutoReleaseSubject without a no subscription timeout. This can cause a memory leak in case no one ever subscribes to this subject. See UnicastAutoReleaseSubject for details.
      Type Parameters:
      T - The type emitted and received by this subject.
      Returns:
      The new instance of UnicastAutoReleaseSubject
    • create

      public static <T> UnicastAutoReleaseSubject<T> create​(long noSubscriptionTimeout, TimeUnit timeUnit)
    • create

      public static <T> UnicastAutoReleaseSubject<T> create​(long noSubscriptionTimeout, TimeUnit timeUnit, rx.functions.Action0 onUnsubscribe)
    • create

      public static <T> UnicastAutoReleaseSubject<T> create​(long noSubscriptionTimeout, TimeUnit timeUnit, rx.Scheduler timeoutScheduler)
    • create

      public static <T> UnicastAutoReleaseSubject<T> create​(long noSubscriptionTimeout, TimeUnit timeUnit, rx.Scheduler timeoutScheduler, rx.functions.Action0 onUnsubscribe)
    • withTraceIdentifier

      public UnicastAutoReleaseSubject<T> withTraceIdentifier​(String id)
    • disposeIfNotSubscribed

      public boolean disposeIfNotSubscribed()
      This will eagerly dispose this Subject without waiting for the no subscription timeout period, if configured. This must be invoked when the caller is sure that no one will subscribe to this subject. Any subscriber after this call will receive an error that the subject is disposed.
      Returns:
      true if the subject was disposed by this call (if and only if there was no subscription).
    • onCompleted

      public void onCompleted()
    • onError

      public void onError​(Throwable e)
    • onNext

      public void onNext​(T t)
    • hasObservers

      public boolean hasObservers()
      Specified by:
      hasObservers in class rx.subjects.Subject<T,​T>