模块  java.base

Class DoubleAccumulator

  • 实现的所有接口
    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)
        使用给定的累加器函数和标识元素创建新实例。
        参数
        accumulatorFunction - 两个参数的无副作用函数
        identity - 累加器函数的标识(初始值)
    • 方法详细信息

      • accumulate

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

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

        public void reset()
        重置变量以保持对标识值的更新。 此方法可能是创建新更新程序的有用替代方法,但仅在没有并发更新时才有效。 因为这种方法本质上是活泼的,所以只有在知道没有线程同时更新时才应该使用它。
      • 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:
        intValue在类 Number
        结果
        转换为类型 int后此对象表示的数值。
      • floatValue

        public float floatValue()
        在缩小基元转换后,将 current value作为 float返回。
        Specified by:
        floatValue在类 Number
        结果
        转换为类型 float后此对象表示的数值。