src/main/java/io/reactivex/internal/util/BackpressureHelper.java
public static long produced(AtomicLong requested, long n) {
        for (;;) {
            long current = requested.get();
            if (current == Long.MAX_VALUE) {
                return Long.MAX_VALUE;
            }
            long update = current - n;
            if (update < 0L) {
                RxJavaPlugins.onError(new IllegalStateException("More produced than requested: " + update));
                update = 0L;
            }
            if (requested.compareAndSet(current, update)) {
                return update;
            }
        }
    }
public static long produced(AtomicLong requested, long n) {
        for (;;) {
            long current = requested.get();
            if (current == Long.MAX_VALUE) {
                return Long.MAX_VALUE;
            }
            long update = current - n;
            if (update < 0L) {
                RxJavaPlugins.onError(new IllegalStateException("More produced than requested: " + update));
                update = 0L;
            }
            if (requested.compareAndSet(current, update)) {
                return update;
            }
        }
    }
public static long produced ( AtomicLong requested , long n ) { for ( ; ; ) { long current = requested . get ( ) ; if ( current == Long . MAX_VALUE ) { return Long . MAX_VALUE ; } long update = current - n ; if ( update < 0L ) { RxJavaPlugins . onError ( new IllegalStateException ( "More produced than requested: " + update ) ) ; update = 0L ; } if ( requested . compareAndSet ( current , update ) ) { return update ; } } }
Atomically subtract the given number (positive, not validated) from the target field unless it contains Long.MAX_VALUE.
@param requested the target field holding the current requested amount
@param n the produced element count, positive (not validated)
@return the new amount
Atomically subtract the given number ( positive not validated ) from the target field unless it contains Long . MAX_VALUE .