Module  java.base

Class LongAdder

  • All Implemented Interfaces:
    Serializable


    public class LongAdder
    extends Number
    implements Serializable
    一个或多个变量一起保持初始为零long和。 当跨线程争用更新(方法add(long) )时,该变量集可以动态增长以减少争用。 方法sum() (或等效地, longValue() )返回保持总和的整个变量组合的当前总和。

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

    LongAdders可以使用ConcurrentHashMap来维护可扩展的频率映射(直方图或多集的形式)。 例如,要将一个计数添加到ConcurrentHashMap<String,LongAdder> freqs ,如果尚未存在,则可以使用freqs.computeIfAbsent(key, k -> new LongAdder()).increment();

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

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

      • LongAdder

        public LongAdder​()
        创建一个新的加法器,初始和为零。
    • 方法详细信息

      • add

        public void add​(long x)
        添加给定值。
        参数
        x - 要添加的值
      • increment

        public void increment​()
        相当于 add(1)
      • decrement

        public void decrement​()
        相当于 add(-1)
      • sum

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

        public void reset​()
        将保持总和的变量重置为零。 该方法可能是创建新加法器的有用替代方法,但仅在没有并发更新时才有效。 因为这个方法本质上是racy,所以只有当已知没有线程同时更新时才应该使用它。
      • sumThenReset

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

        public long longValue​()
        相当于 sum()
        Specified by:
        longValueNumber
        结果
        总和
      • intValue

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

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

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