- java.lang.Object
-
- java.lang.Number
-
- java.util.concurrent.atomic.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
,但不定义诸如方法equals
,hashCode
和compareTo
,因为实例预计将发生突变,所以不如收集钥匙有用。- 从以下版本开始:
- 1.8
- 另请参见:
- Serialized Form
-
-
构造方法摘要
构造方法 Constructor 描述 LongAdder()
创建一个新的加法器,初始和为零。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 void
add(long x)
添加给定值。void
decrement()
相当于add(-1)
。double
doubleValue()
在扩展原始转换后,返回sum()
作为double
。float
floatValue()
在扩展原始转换后,返回sum()
作为float
。void
increment()
相当于add(1)
。int
intValue()
在缩小原始转换后,返回sum()
作为int
。long
longValue()
相当于sum()
。void
reset()
将保持总和的变量重置为零。long
sum()
返回当前总和。long
sumThenReset()
String
toString()
-
Methods inherited from class java.lang.Number
byteValue, shortValue
-
-
-
-
方法详细信息
-
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()
- 结果
- 总和
-
intValue
public int intValue()
在缩小原始转换后返回sum()
作为int
。
-
floatValue
public float floatValue()
在扩展原始转换后,返回sum()
作为float
。- Specified by:
-
floatValue
在Number
- 结果
-
该对象在转换为
float
之后表示的数值。
-
doubleValue
public double doubleValue()
在扩展原始转换后,返回sum()
作为double
。- Specified by:
-
doubleValue
在Number
- 结果
-
该对象在转换为
double
之后表示的数值。
-
-