reactor-core/src/main/java/reactor/core/Disposables.java
static <T> boolean set(AtomicReferenceFieldUpdater<T, Disposable> updater, T holder, @Nullable Disposable newValue) {
		for (;;) {
			Disposable current = updater.get(holder);
			if (current == DISPOSED) {
				if (newValue != null) {
					newValue.dispose();
				}
				return false;
			}
			if (updater.compareAndSet(holder, current, newValue)) {
				if (current != null) {
					current.dispose();
				}
				return true;
			}
		}
	}
static <T> boolean set(AtomicReferenceFieldUpdater<T, Disposable> updater, T holder, @Nullable Disposable newValue) {
		for (;;) {
			Disposable current = updater.get(holder);
			if (current == DISPOSED) {
				if (newValue != null) {
					newValue.dispose();
				}
				return false;
			}
			if (updater.compareAndSet(holder, current, newValue)) {
				if (current != null) {
					current.dispose();
				}
				return true;
			}
		}
	}
static < T > boolean set ( AtomicReferenceFieldUpdater < T , Disposable > updater , T holder , @ Nullable Disposable newValue ) { for ( ; ; ) { Disposable current = updater . get ( holder ) ; if ( current == DISPOSED ) { if ( newValue != null ) { newValue . dispose ( ) ; } return false ; } if ( updater . compareAndSet ( holder , current , newValue ) ) { if ( current != null ) { current . dispose ( ) ; } return true ; } } }
Atomically set the field to a {@link Disposable} and dispose the old content.

@param updater the target field updater
@param holder the target instance holding the field
@param newValue the new Disposable to set
@return true if successful, false if the field contains the {@link #DISPOSED} instance.
Atomically set the field to a { @link Disposable } and dispose the old content .