Module java.base

Class LongAdder

java.lang.Object
java.lang.Number
java.util.concurrent.atomic.LongAdder
所有已实现的接口:
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版本起:
1.8
参见:
  • Constructor Details

    • LongAdder

      public LongAdder()
      创建一个初始总和为零的新加法器。
  • Method Details

    • 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()
      将维护总和的变量重置为零。如果没有并发更新,则此方法可能是创建新加法器的有用替代方法,但仅在已知没有线程同时更新时才有效。因为此方法本质上是竞争的,所以只有在已知没有线程同时更新时才应使用。
    • sumThenReset

      public long sumThenReset()
      效果上等同于sum()后跟reset()。例如,在多线程计算之间的静态点期间可能适用此方法。如果有更新与此方法并发进行,则返回的值不能保证是重置之前发生的最终值。
      返回:
      总和
    • toString

      public String toString()
      返回sum()的字符串表示形式。
      覆盖:
      toString 在类 Object
      返回:
      sum()的字符串表示形式
    • longValue

      public long longValue()
      等效于sum()
      指定者:
      longValue 在类 Number
      返回:
      总和
    • intValue

      public int intValue()
      返回通过缩小原始转换的int后的sum()
      指定者:
      intValue 在类 Number
      返回:
      转换为int类型后此对象表示的数值。
    • floatValue

      public float floatValue()
      返回通过扩展原始转换的float后的sum()
      指定者:
      floatValue 在类 Number
      返回:
      转换为float类型后此对象表示的数值。
    • doubleValue

      public double doubleValue()
      返回通过扩展原始转换的double后的sum()
      指定者:
      doubleValue 在类 Number
      返回:
      转换为double类型后此对象表示的数值。