java.lang.Object
java.lang.Number
java.util.concurrent.atomic.LongAdder
- 所有已实现的接口:
-
Serializable
一个或多个变量一起维护最初为零的
long
总和。当更新(方法add(long)
)在线程之间存在争用时,变量集可能会动态增长以减少争用。方法sum()
(或等效地,longValue()
)返回维护总和的变量之间的当前总和。
当多个线程更新用于收集统计信息等目的的共同总和时,通常首选此类,而不是AtomicLong
进行细粒度同步控制。在低更新争用下,这两个类具有类似的特性。但在高争用下,此类的预期吞吐量显着更高,代价是更高的空间消耗。
LongAdders可以与ConcurrentHashMap
一起使用,以维护可扩展的频率映射(一种直方图或多集形式)。例如,要向ConcurrentHashMap<String,LongAdder> freqs
添加计数,如果尚未存在,则初始化,可以使用 freqs.computeIfAbsent(key, k -> new LongAdder()).increment();
此类扩展了Number
,但不定义诸如equals
、hashCode
和compareTo
等方法,因为预计实例将被突变,因此作为集合键是没有用的。
- 自1.8版本起:
- 1.8
- 参见:
-
Constructor Summary
Constructors -
Method Summary
Methods declared in class java.lang.Number
byteValue, shortValue
-
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()- 返回:
- 总和
-
toString
返回sum()
的字符串表示形式。 -
longValue
public long longValue()等效于sum()
。 -
intValue
public int intValue()返回通过缩小原始转换的int
后的sum()
。 -
floatValue
public float floatValue()返回通过扩展原始转换的float
后的sum()
。- 指定者:
-
floatValue
在类Number
- 返回:
-
转换为
float
类型后此对象表示的数值。
-
doubleValue
public double doubleValue()返回通过扩展原始转换的double
后的sum()
。- 指定者:
-
doubleValue
在类Number
- 返回:
-
转换为
double
类型后此对象表示的数值。
-