java.lang.Object
java.lang.Number
java.util.concurrent.atomic.DoubleAccumulator
- 所有已实现的接口:
-
Serializable
一个或多个变量一起维护一个使用提供的函数更新的运行中的
double
值。当跨线程争用更新(方法accumulate(double)
)时,变量集可能会动态增长以减少争用。方法get()
(或等效地,doubleValue()
)返回维护更新的变量之间的当前值。
当多个线程更新用于诸如频繁更新但较少频繁读取的摘要统计等目的的共同值时,通常应优先使用此类。
提供的累加器函数应是无副作用的,因为当尝试更新由于线程之间的争用而失败时,可能会重新应用该函数。为了获得可预测的结果,在使用上下文中所需的浮点容差内,累加器函数应在浮点容差内是可交换和可结合的。该函数应用现有值(或标识)作为一个参数,给定的更新作为另一个参数。例如,为了维护一个运行的最大值,您可以提供Double::max
以及Double.NEGATIVE_INFINITY
作为标识。在线程内或跨线程内的累积顺序不被保证。因此,如果需要数值稳定性,特别是在结合数量级差异很大的值时,此类可能不适用。
类DoubleAdder
为维护总和的常见特殊情况提供了此类功能的类似物。调用new DoubleAdder()
等效于new DoubleAccumulator((x, y) -> x + y, 0.0)
。
此类扩展了Number
,但不定义诸如equals
、hashCode
和compareTo
等方法,因为预计实例将被突变,因此作为集合键是没有用的。
- 自 JDK 版本:
- 1.8
- 参见:
-
Constructor Summary
ConstructorDescriptionDoubleAccumulator
(DoubleBinaryOperator accumulatorFunction, double identity) 使用给定的累加器函数和标识元素创建一个新实例。 -
Method Summary
Methods declared in class java.lang.Number
byteValue, shortValue
-
Constructor Details
-
DoubleAccumulator
使用给定的累加器函数和标识元素创建一个新实例。- 参数:
-
accumulatorFunction
- 一个具有两个参数的无副作用函数 -
identity
- 累加器函数的标识(初始值)
-
-
Method Details
-
accumulate
public void accumulate(double x) 使用给定值更新。- 参数:
-
x
- 值
-
get
public double get()返回当前值。返回的值不是原子快照;在没有并发更新的情况下调用会返回准确的结果,但在计算值时发生的并发更新可能不会被合并。- 返回:
- 当前值
-
reset
public void reset()将维护更新的变量重置为标识值。如果没有并发更新,此方法可能是创建新更新器的一个有用替代方法。因为此方法本质上是有竞争的,所以只有在已知没有线程同时更新时才应使用它。 -
getThenReset
public double getThenReset()- 返回:
- 重置前的值
-
toString
返回当前值的字符串表示形式。 -
doubleValue
public double doubleValue()等效于get()
。- 指定者:
-
doubleValue
在类Number
- 返回:
- 当前值
-
longValue
public long longValue()返回当前值作为一个long
,经过缩小的原始转换。 -
intValue
public int intValue()返回当前值作为一个int
,经过缩小的原始转换。 -
floatValue
public float floatValue()返回当前值作为一个float
,经过缩小的原始转换。- 指定者:
-
floatValue
在类Number
- 返回:
-
在转换为
float
类型后表示的数值。
-