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 .