Class AtomicDouble

  • All Implemented Interfaces:
    java.io.Serializable

    @GwtIncompatible
    @ReflectionSupport(FULL)
    public class AtomicDouble
    extends java.lang.Number
    implements java.io.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:
    Serialized Form
    • Constructor Summary

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

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      double accumulateAndGet​(double x, java.util.function.DoubleBinaryOperator accumulatorFunction)
      Atomically updates the current value with the results of applying the given function to the current and given values.
      double addAndGet​(double delta)
      Atomically adds the given value to the current value.
      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 doubleValue()
      Returns the value of this AtomicDouble as a double.
      float floatValue()
      Returns the value of this AtomicDouble as a float after a narrowing primitive conversion.
      double get()
      Gets the current value.
      double getAndAccumulate​(double x, java.util.function.DoubleBinaryOperator accumulatorFunction)
      Atomically updates the current value with the results of applying the given function to the current and given values.
      double getAndAdd​(double delta)
      Atomically adds the given value to the current value.
      double getAndSet​(double newValue)
      Atomically sets to the given value and returns the old value.
      double getAndUpdate​(java.util.function.DoubleUnaryOperator updateFunction)
      Atomically updates the current value with the results of applying the given function.
      int intValue()
      Returns the value of this AtomicDouble as an int after a narrowing primitive conversion.
      void lazySet​(double newValue)
      Eventually sets to the given value.
      long longValue()
      Returns the value of this AtomicDouble as a long after a narrowing primitive conversion.
      void set​(double newValue)
      Sets to the given value.
      java.lang.String toString()
      Returns the String representation of the current value.
      double updateAndGet​(java.util.function.DoubleUnaryOperator updateFunction)
      Atomically updates the current value with the results of applying the given function.
      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 Detail

      • 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 Detail

      • 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,
                                             java.util.function.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,
                                             java.util.function.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​(java.util.function.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​(java.util.function.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 java.lang.String toString()
        Returns the String representation of the current value.
        Overrides:
        toString in class java.lang.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 java.lang.Number
      • longValue

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

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

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