public final double updateAndGet(DoubleUnaryOperator updateFunction)
    {
        double prev, next;
        do
        {
            prev = get();
            next = updateFunction.applyAsDouble(prev);
        }
        while (!compareAndSet(prev, next));
        return next;
    }
public final double updateAndGet ( DoubleUnaryOperator updateFunction ) { double prev , next ; do { prev = get ( ) ; next = updateFunction . applyAsDouble ( prev ) ; } while ( ! compareAndSet ( prev , next ) ) ; return next ; }
Atomically updates the current value with the results of applying the
given function, returning the updated value. The function should be
side-effect-free, since it may be re-applied when attempted updates fail
due to contention among threads.

@param updateFunction a side-effect-free function
@return the updated value