Class AtomicDouble

java.lang.Object
java.lang.Number
com.google.common.util.concurrent.AtomicDouble
All Implemented Interfaces:
Serializable

A double value that may be updated atomically. See the java.util.concurrent.atomic package specification for description of the properties of atomic variables. An AtomicDouble is used in applications such as atomic accumulation, and cannot be used as a replacement for a Double. However, this class does extend Number to allow uniform access by tools and utilities that deal with numerically-based classes.

This class compares primitive double values in methods such as compareAndSet(double, double) by comparing their bitwise representation using Double.doubleToRawLongBits(double), which differs from both the primitive double == operator and from Double.equals(java.lang.Object), as if implemented by:


 static boolean bitEquals(double x, double y) {
   long xBits = Double.doubleToRawLongBits(x);
   long yBits = Double.doubleToRawLongBits(y);
   return xBits == yBits;
 }
 

It is possible to write a more scalable updater, at the cost of giving up strict atomicity. See for example DoubleAdder.

Since:
11.0
Author:
Doug Lea, Martin Buchholz
See Also:
  • Constructor Summary

    Constructors
    Constructor
    Description
    Creates a new AtomicDouble with initial value 0.0.
    AtomicDouble(double initialValue)
    Creates a new AtomicDouble with the given initial value.
  • Method Summary

    Modifier and Type
    Method
    Description
    final double
    accumulateAndGet(double x, DoubleBinaryOperator accumulatorFunction)
    Atomically updates the current value with the results of applying the given function to the current and given values.
    final double
    addAndGet(double delta)
    Atomically adds the given value to the current value.
    final boolean
    compareAndSet(double expect, double update)
    Atomically sets the value to the given updated value if the current value is bitwise equal to the expected value.
    double
    Returns the value of this AtomicDouble as a double.
    float
    Returns the value of this AtomicDouble as a float after a narrowing primitive conversion.
    final double
    get()
    Gets the current value.
    final double
    getAndAccumulate(double x, DoubleBinaryOperator accumulatorFunction)
    Atomically updates the current value with the results of applying the given function to the current and given values.
    final double
    getAndAdd(double delta)
    Atomically adds the given value to the current value.
    final double
    getAndSet(double newValue)
    Atomically sets to the given value and returns the old value.
    final double
    Atomically updates the current value with the results of applying the given function.
    int
    Returns the value of this AtomicDouble as an int after a narrowing primitive conversion.
    final void
    lazySet(double newValue)
    Eventually sets to the given value.
    long
    Returns the value of this AtomicDouble as a long after a narrowing primitive conversion.
    final void
    set(double newValue)
    Sets to the given value.
    Returns the String representation of the current value.
    final double
    Atomically updates the current value with the results of applying the given function.
    final boolean
    weakCompareAndSet(double expect, double update)
    Atomically sets the value to the given updated value if the current value is bitwise equal to the expected value.

    Methods inherited from class java.lang.Number

    byteValue, shortValue

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • AtomicDouble

      public AtomicDouble(double initialValue)
      Creates a new AtomicDouble with the given initial value.
      Parameters:
      initialValue - the initial value
    • AtomicDouble

      public AtomicDouble()
      Creates a new AtomicDouble with initial value 0.0.
  • Method Details

    • get

      public final double get()
      Gets the current value.
      Returns:
      the current value
    • set

      public final void set(double newValue)
      Sets to the given value.
      Parameters:
      newValue - the new value
    • lazySet

      public final void lazySet(double newValue)
      Eventually sets to the given value.
      Parameters:
      newValue - the new value
    • getAndSet

      public final double getAndSet(double newValue)
      Atomically sets to the given value and returns the old value.
      Parameters:
      newValue - the new value
      Returns:
      the previous value
    • compareAndSet

      public final boolean compareAndSet(double expect, double update)
      Atomically sets the value to the given updated value if the current value is bitwise equal to the expected value.
      Parameters:
      expect - the expected value
      update - the new value
      Returns:
      true if successful. False return indicates that the actual value was not bitwise equal to the expected value.
    • weakCompareAndSet

      public final boolean weakCompareAndSet(double expect, double update)
      Atomically sets the value to the given updated value if the current value is bitwise equal to the expected value.

      May fail spuriously and does not provide ordering guarantees, so is only rarely an appropriate alternative to compareAndSet.

      Parameters:
      expect - the expected value
      update - the new value
      Returns:
      true if successful
    • getAndAdd

      @CanIgnoreReturnValue public final double getAndAdd(double delta)
      Atomically adds the given value to the current value.
      Parameters:
      delta - the value to add
      Returns:
      the previous value
    • addAndGet

      @CanIgnoreReturnValue public final double addAndGet(double delta)
      Atomically adds the given value to the current value.
      Parameters:
      delta - the value to add
      Returns:
      the updated value
    • getAndAccumulate

      @CanIgnoreReturnValue public final double getAndAccumulate(double x, DoubleBinaryOperator accumulatorFunction)
      Atomically updates the current value with the results of applying the given function to the current and given values.
      Parameters:
      x - the update value
      accumulatorFunction - the accumulator function
      Returns:
      the previous value
      Since:
      31.1
    • accumulateAndGet

      @CanIgnoreReturnValue public final double accumulateAndGet(double x, DoubleBinaryOperator accumulatorFunction)
      Atomically updates the current value with the results of applying the given function to the current and given values.
      Parameters:
      x - the update value
      accumulatorFunction - the accumulator function
      Returns:
      the updated value
      Since:
      31.1
    • getAndUpdate

      @CanIgnoreReturnValue public final double getAndUpdate(DoubleUnaryOperator updateFunction)
      Atomically updates the current value with the results of applying the given function.
      Parameters:
      updateFunction - the update function
      Returns:
      the previous value
      Since:
      31.1
    • updateAndGet

      @CanIgnoreReturnValue public final double updateAndGet(DoubleUnaryOperator updateFunction)
      Atomically updates the current value with the results of applying the given function.
      Parameters:
      updateFunction - the update function
      Returns:
      the updated value
      Since:
      31.1
    • toString

      public String toString()
      Returns the String representation of the current value.
      Overrides:
      toString in class Object
      Returns:
      the String representation of the current value
    • intValue

      public int intValue()
      Returns the value of this AtomicDouble as an int after a narrowing primitive conversion.
      Specified by:
      intValue in class Number
    • longValue

      public long longValue()
      Returns the value of this AtomicDouble as a long after a narrowing primitive conversion.
      Specified by:
      longValue in class Number
    • floatValue

      public float floatValue()
      Returns the value of this AtomicDouble as a float after a narrowing primitive conversion.
      Specified by:
      floatValue in class Number
    • doubleValue

      public double doubleValue()
      Returns the value of this AtomicDouble as a double.
      Specified by:
      doubleValue in class Number