Module  java.base

Class LongAccumulator

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

      • accumulate

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

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

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

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

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

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

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

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

        public double doubleValue​()
        在扩展原始转换后,返回 current value作为 double
        Specified by:
        doubleValueNumber
        结果
        该对象在转换为 double之后表示的数值。