模块 java.base

类 DoubleAccumulator

java.lang.Object
java.lang.Number
java.util.concurrent.atomic.DoubleAccumulator
所有已实现的接口:
Serializable

public class DoubleAccumulator extends Number implements Serializable
一个或多个变量共同维护使用提供的函数更新的运行 double 值。当更新(方法 accumulate(double) )在线程之间发生争用时,变量集可能会动态增长以减少争用。方法 get() (或等效地,doubleValue() )返回维护更新的变量的当前值。

当多个线程更新一个公共值时,该类通常比备选方案更可取,该公共值用于诸如经常更新但读取频率较低的摘要统计信息之类的目的。

提供的累加器函数应该是无副作用的,因为当由于线程之间的争用而尝试更新失败时,它可能会被重新应用。为了获得可预测的结果,累加器函数应该在使用上下文所需的浮点公差范围内是可交换的和关联的。该函数应用现有值(或标识)作为一个参数,并将给定的更新作为另一个参数。例如,要保持运行最大值,您可以提供 Double::maxDouble.NEGATIVE_INFINITY 作为标识。不能保证线程内或跨线程的累积顺序。因此,如果需要数值稳定性,则此类可能不适用,尤其是在组合数量级大不相同的值时。

DoubleAdder 为维护总和的常见特殊情况提供此类功能的模拟。调用 new DoubleAdder() 等同于 new DoubleAccumulator((x, y) -> x + y, 0.0)

此类扩展了 Number ,但 not 定义了诸如 equalshashCode compareTo 之类的方法,因为实例预计会发生变异,因此不能用作集合键。

自从:
1.8
参见:
  • 构造方法详细信息

    • DoubleAccumulator

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

    • accumulate

      public void accumulate(double x)
      使用给定值更新。
      参数:
      x - 值
    • get

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

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

      public double getThenReset()
      等效于 get() 后跟 reset() 。该方法可以应用于例如多线程计算之间的静止点期间。如果有与此方法并发的更新,则返回值not保证是重置前发生的最终值。
      返回:
      重置前的值
    • toString

      public String  toString()
      返回当前值的字符串表示形式。
      重写:
      toString 在类 Object
      返回:
      当前值的 String 表示形式
    • doubleValue

      public double doubleValue()
      相当于 get()
      指定者:
      doubleValue 在类 Number
      返回:
      当前值
    • longValue

      public long longValue()
      在缩小基元转换后将 当前值 作为 long 返回。
      指定者:
      longValue 在类 Number
      返回:
      转换为类型 long 后此对象表示的数值。
    • intValue

      public int intValue()
      在缩小基元转换后将 当前值 作为 int 返回。
      指定者:
      intValue 在类 Number
      返回:
      转换为类型 int 后此对象表示的数值。
    • floatValue

      public float floatValue()
      在缩小基元转换后将 当前值 作为 float 返回。
      指定者:
      floatValue 在类 Number
      返回:
      转换为类型 float 后此对象表示的数值。