模块 java.base

类 LongAccumulator

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

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

当多个线程更新用于收集统计信息而不是细粒度同步控制的公共值时,此类通常优于 AtomicLong 。在低更新竞争下,这两个类具有相似的特征。但在高竞争下,此类的预期吞吐量明显更高,但代价是空间消耗更高。

线程内或跨线程的累积顺序无法保证且无法依赖,因此此类仅适用于累积顺序无关紧要的函数。提供的累加器函数应该是无副作用的,因为当由于线程之间的争用而尝试更新失败时,它可能会被重新应用。为了获得可预测的结果,累加器函数应该是关联的和可交换的。该函数应用现有值(或身份)作为一个参数,并将给定的更新作为另一个参数。例如,要保持运行最大值,您可以提供 Long::maxLong.MIN_VALUE 作为标识。

LongAdder 为维护计数和总和的常见特殊情况提供此类功能的模拟。调用 new LongAdder() 等同于 new LongAccumulator((x, y) -> x + y, 0L)

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

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

    • LongAccumulator

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

    • accumulate

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

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

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

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

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

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

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

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

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