java.lang.Object
java.lang.Number
java.util.concurrent.atomic.LongAccumulator
- 所有已实现的接口:
Serializable
一个或多个变量共同维护使用提供的函数更新的运行
long 值。当更新(方法 accumulate(long) )在线程之间发生争用时,变量集可能会动态增长以减少争用。方法 get() (或等效地,longValue() )返回维护更新的变量的当前值。
当多个线程更新用于收集统计信息而不是细粒度同步控制的公共值时,此类通常优于 AtomicLong 。在低更新竞争下,这两个类具有相似的特征。但在高竞争下,此类的预期吞吐量明显更高,但代价是空间消耗更高。
线程内或跨线程的累积顺序无法保证且无法依赖,因此此类仅适用于累积顺序无关紧要的函数。提供的累加器函数应该是无副作用的,因为当由于线程之间的争用而尝试更新失败时,它可能会被重新应用。为了获得可预测的结果,累加器函数应该是关联的和可交换的。该函数应用现有值(或身份)作为一个参数,并将给定的更新作为另一个参数。例如,要保持运行最大值,您可以提供 Long::max 和 Long.MIN_VALUE 作为标识。
类 LongAdder 为维护计数和总和的常见特殊情况提供此类功能的模拟。调用 new LongAdder() 等同于 new LongAccumulator((x, y) -> x + y, 0L) 。
此类扩展了 Number ,但 not 定义了诸如 equals、hashCode 和 compareTo 之类的方法,因为实例预计会发生变异,因此不能用作集合键。
- 自从:
- 1.8
- 参见:
-
构造方法总结
构造方法构造方法描述LongAccumulator(LongBinaryOperator accumulatorFunction, long identity) 使用给定的累加器函数和标识元素创建一个新实例。 -
方法总结
在类 java.lang.Number 中声明的方法
byteValue, shortValue
-
构造方法详细信息
-
LongAccumulator
使用给定的累加器函数和标识元素创建一个新实例。- 参数:
accumulatorFunction- 两个参数的无副作用函数identity- 累加器函数的标识(初始值)
-
-
方法详情
-
accumulate
public void accumulate(long x) 使用给定值更新。- 参数:
x- 值
-
get
public long get()返回当前值。返回值为NOT一个原子快照;在没有并发更新的情况下调用会返回准确的结果,但在计算值时发生的并发更新可能不会被合并。- 返回:
- 当前值
-
reset
public void reset()重置变量以维护对标识值的更新。此方法可能是创建新更新程序的有用替代方法,但仅在没有并发更新时才有效。因为这种方法本质上是活泼的,所以只应在已知没有线程同时更新时使用它。 -
getThenReset
public long getThenReset()- 返回:
- 重置前的值
-
toString
返回当前值的字符串表示形式。 -
longValue
public long longValue()相当于get()。 -
intValue
public int intValue()在缩小基元转换后将 当前值 作为int返回。 -
floatValue
public float floatValue()在扩展基元转换后将 当前值 作为float返回。- 指定者:
floatValue在类Number中- 返回:
-
转换为类型
float后此对象表示的数值。
-
doubleValue
public double doubleValue()在扩展基元转换后将 当前值 作为double返回。- 指定者:
doubleValue在类Number中- 返回:
-
转换为类型
double后此对象表示的数值。
-