- java.lang.Object
-
- java.lang.Number
-
- java.util.concurrent.atomic.LongAdder
-
- 实现的所有接口
-
Serializable
public class LongAdderextends Numberimplements 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
-
-
构造方法摘要
构造方法 构造器 描述 LongAdder()
创建一个初始总和为零的新加法器。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 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()
-
声明方法的类 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()
重置保持总和为零的变量。 此方法可能是创建新加法器的有用替代方法,但仅在没有并发更新时才有效。 因为这种方法本质上是活泼的,所以只有在知道没有线程同时更新时才应该使用它。
-
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
后此对象表示的数值。
-
-