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
,但不定义诸如equals
、hashCode
和compareTo
等方法,因为预计实例将被改变,因此作为集合键是没有用的。
- 自Java版本:
- 1.8
- 参见:
-
Constructor Summary
ConstructorDescriptionLongAccumulator
(LongBinaryOperator accumulatorFunction, long identity) 使用给定的累加器函数和标识元素创建一个新实例。 -
Method Summary
Methods declared in class java.lang.Number
byteValue, shortValue
-
Constructor Details
-
LongAccumulator
使用给定的累加器函数和标识元素创建一个新实例。- 参数:
-
accumulatorFunction
- 两个参数的无副作用函数 -
identity
- 累加器函数的标识(初始值)
-
-
Method Details
-
accumulate
public void accumulate(long x) 使用给定值更新。- 参数:
-
x
- 值
-
get
public long get()返回当前值。返回的值不是原子快照;在没有并发更新的情况下调用将返回准确的结果,但在计算值时发生并发更新可能不会被合并。- 返回:
- 当前值
-
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
类型后此对象表示的数值。
-