public class LongAdder
extends Number
implements Serializable
java.lang.Object | ||
↳ | java.lang.Number | |
↳ | java.util.concurrent.atomic.LongAdder |
一个或多个变量,它们共同维持最初的零long
总和。 当更新(方法add(long)
)在线程间竞争时,该组变量可能会动态增长以减少争用。 方法sum()
(或者等价地, longValue()
)返回当前在维持总和的变量上组合的总数。
当多线程更新用于诸如收集统计数据之类的目的的共同和时,通常优选AtomicLong
,而不是用于细粒度同步控制。 在低更新争用下,这两个类别具有相似的特征。 但是,在高度争论中,该类别的预期吞吐量显着较高,但以较高的空间消耗为代价。
LongAdders可与ConcurrentHashMap
一起使用,以维护可伸缩的频率映射(一种直方图或多重集)。 例如,要将计数添加到ConcurrentHashMap<String,LongAdder> freqs
,初始化(如果尚未存在),可以使用freqs.computeIfAbsent(key, k -> new LongAdder()).increment();
该类扩展 Number
,但 不定义诸如方法 equals
, hashCode
和 compareTo
,因为实例预计将发生突变,所以不如收集钥匙有用。
Public constructors |
|
---|---|
LongAdder() 创建一个初始和为零的新加法器。 |
Public methods |
|
---|---|
void |
add(long x) 添加给定的值。 |
void |
decrement() 相当于 |
double |
doubleValue() 在扩展原始转换之后,将 |
float |
floatValue() 在扩大原始转换之后,将 |
void |
increment() 相当于 |
int |
intValue() 在缩小原始转换之后,将 |
long |
longValue() 相当于 |
void |
reset() 重置将总和保持为零的变量。 |
long |
sum() 返回当前总和。 |
long |
sumThenReset() |
String |
toString() |
Inherited methods |
|
---|---|
From class java.lang.Number
|
|
From class java.lang.Object
|
double doubleValue ()
在扩展原始转换之后,将 sum()
作为 double
返回。
Returns | |
---|---|
double |
the numeric value represented by this object after conversion to type double . |
float floatValue ()
在扩展原始转换之后,将 sum()
作为 float
返回。
Returns | |
---|---|
float |
the numeric value represented by this object after conversion to type float . |
int intValue ()
在缩小原始转换之后,将 sum()
作为 int
返回。
Returns | |
---|---|
int |
the numeric value represented by this object after conversion to type int . |
void reset ()
重置将总和保持为零的变量。 此方法可能是创建新加法器的有用替代方法,但只有在没有并发更新时才有效。 由于此方法本质上是活泼的,因此只有在知道没有线程正在同时更新时才应使用它。
long sum ()
返回当前总和。 返回的值不是原子快照; 在没有并发更新的情况下调用会返回准确的结果,但是在计算总和时发生的并发更新可能不会被合并。
Returns | |
---|---|
long |
the sum |
long sumThenReset ()
相当于sum()
后跟reset()
。 这种方法可能适用于多线程计算之间的静态点。 如果有与此方法同时发生的更新,则返回的值不能保证是重置前发生的最终值。
Returns | |
---|---|
long |
the sum |