Module  java.base

Class DoubleAccumulator

  • All Implemented Interfaces:
    Serializable


    public class DoubleAccumulator
    extends Number
    implements Serializable
    一个或多个变量,它们一起保持运行double使用所提供的功能更新值。 当跨线程争用更新(方法accumulate(double) )时,该变量集可以动态增长以减少争用。 方法get() (或等效地, doubleValue() )返回维护更新的变量的当前值。

    当多个线程更新用于诸如经常更新但较不频繁读取的摘要统计信息的常用值时,此类通常优于替代方案。

    提供的累加器功能应该是无效的,因为尝试的更新由于线程之间的争用而失败时可能会被重新应用。 该函数应用当前值作为其第一个参数,给定的更新作为第二个参数。 例如,要保持最大值的运行,您可以提供Double::max以及Double.NEGATIVE_INFINITY作为身份。 线程内或跨线程的累积顺序不能保证。 因此,如果需要数值稳定性,特别是当组合几乎不同数量级的值时,该类可能不适用。

    DoubleAdder类提供了类的功能,用于维护和的常见特殊情况。 电话new DoubleAdder()相当于new DoubleAccumulator((x, y) -> x + y, 0.0)

    该类扩展Number ,但定义诸如方法equalshashCodecompareTo ,因为实例预计将发生突变,所以不如收集钥匙有用。

    从以下版本开始:
    1.8
    另请参见:
    Serialized Form
    • 构造方法详细信息

      • DoubleAccumulator

        public DoubleAccumulator​(DoubleBinaryOperator accumulatorFunction,
                                 double identity)
        使用给定的累加器函数和identity元素创建一个新的实例。
        参数
        accumulatorFunction - 两个参数的无副作用的函数
        identity - 累加器功能的标识(初始值)
    • 方法详细信息

      • accumulate

        public void accumulate​(double x)
        具有给定值的更新。
        参数
        x - 值
      • get

        public double get​()
        返回当前值。 返回的值不是原子快照; 在没有并发更新的情况下调用返回一个准确的结果,但是在计算该值时发生的并发更新可能未被并入。
        结果
        当前值
      • reset

        public void reset​()
        重置维持更新到标识值的变量。 此方法可能是创建新更新程序的有用替代方法,但仅在没有并发更新时才有效。 因为这个方法本质上是racy,所以只有当已知没有线程同时更新时才应该使用它。
      • getThenReset

        public double getThenReset​()
        相当于get()其次是reset() 该方法可以例如在多线程计算之间的静态点期间使用。 如果与此方法同时存在更新,则返回值不能保证是重置前发生的最终值。
        结果
        复位前的值
      • toString

        public String toString​()
        返回当前值的String表示形式。
        重写:
        toStringObject
        结果
        当前值的String表示形式
      • doubleValue

        public double doubleValue​()
        相当于 get()
        Specified by:
        doubleValueNumber
        结果
        当前值
      • longValue

        public long longValue​()
        在缩小原始转换后,返回 current value作为 long
        Specified by:
        longValueNumber
        结果
        该对象在转换为 long之后表示的数值。
      • intValue

        public int intValue​()
        在缩小原始转换后,返回 current value作为 int
        Specified by:
        intValueNumber
        结果
        该对象在转换为 int之后表示的数值。
      • floatValue

        public float floatValue​()
        在缩小原始转换后,返回 current value作为 float
        Specified by:
        floatValueNumber
        结果
        该对象在转换为 float之后表示的数值。