模块  java.base

Class LongAccumulator

  • 实现的所有接口
    Serializable

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

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

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

    LongAdder提供了此类功能的类比,用于维护计数和总和的常见特殊情况。 电话new LongAdder()相当于new LongAccumulator((x, y) -> x + y, 0L)

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

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

      • LongAccumulator

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

      • accumulate

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

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

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

        public long getThenReset()
        相当于get()然后是reset() 例如,该方法可以应用于多线程计算之间的静止点。 如果此方法同时存在更新,则不能保证返回的值是重置之前发生的最终值。
        结果
        重置前的值
      • toString

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

        public long longValue()
        相当于 get()
        Specified by:
        longValueNumber
        结果
        当前的价值
      • intValue

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

        public float floatValue()
        在扩展原始转换后,将 current value作为 float返回。
        Specified by:
        floatValue在类 Number
        结果
        转换为类型 float后此对象表示的数值。
      • doubleValue

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