- java.lang.Object
-
- java.lang.Number
-
- java.util.concurrent.atomic.DoubleAccumulator
-
- 实现的所有接口
-
Serializable
public class DoubleAccumulatorextends Numberimplements 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
,因为实例预计将发生突变,所以不如收集钥匙有用。- 从以下版本开始:
- 1.8
- 另请参见:
- Serialized Form
-
-
构造方法摘要
构造方法 构造器 描述 DoubleAccumulator(DoubleBinaryOperator accumulatorFunction, double identity)
使用给定的累加器函数和标识元素创建新实例。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 void
accumulate(double x)
具有给定值的更新。double
doubleValue()
相当于get()
。float
floatValue()
在缩小基元转换后,将 current value作为float
返回。double
get()
返回当前值。double
getThenReset()
int
intValue()
在缩小基元转换后,将 current value作为int
返回。long
longValue()
在缩小基元转换后,将 current value作为long
返回。void
reset()
重置变量以保持对标识值的更新。String
toString()
返回当前值的String表示形式。-
声明方法的类 java.lang.Number
byteValue, shortValue
-
-
-
-
构造方法详细信息
-
DoubleAccumulator
public DoubleAccumulator(DoubleBinaryOperator accumulatorFunction, double identity)
使用给定的累加器函数和标识元素创建新实例。- 参数
-
accumulatorFunction
- 两个参数的无副作用函数 -
identity
- 累加器函数的标识(初始值)
-
-
方法详细信息
-
accumulate
public void accumulate(double x)
具有给定值的更新。- 参数
-
x
- 该值
-
get
public double get()
返回当前值。 返回的值不是原子快照; 在没有并发更新的情况下调用会返回准确的结果,但是在计算值时发生的并发更新可能不会合并。- 结果
- 当前的价值
-
reset
public void reset()
重置变量以保持对标识值的更新。 此方法可能是创建新更新程序的有用替代方法,但仅在没有并发更新时才有效。 因为这种方法本质上是活泼的,所以只有在知道没有线程同时更新时才应该使用它。
-
getThenReset
public double getThenReset()
- 结果
- 重置前的值
-
doubleValue
public double doubleValue()
相当于get()
。- Specified by:
-
doubleValue
类Number
- 结果
- 当前的价值
-
longValue
public long longValue()
在缩小基元转换后,将 current value作为long
返回。
-
intValue
public int intValue()
在缩小基元转换后,将 current value作为int
返回。
-
floatValue
public float floatValue()
在缩小基元转换后,将 current value作为float
返回。- Specified by:
-
floatValue
在类Number
- 结果
- 转换为类型
float
后此对象表示的数值。
-
-