public class DoubleAccumulator
extends Number
implements Serializable
java.lang.Object | ||
↳ | java.lang.Number | |
↳ | java.util.concurrent.atomic.DoubleAccumulator |
一个或多个变量一起使用提供的函数来更新正在运行的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
,因为实例预计将发生突变,所以不如收集钥匙有用。
Public constructors |
|
---|---|
DoubleAccumulator(DoubleBinaryOperator accumulatorFunction, double identity) 使用给定的累加器函数和标识元素创建一个新实例。 |
Public methods |
|
---|---|
void |
accumulate(double x) 用给定的值更新。 |
double |
doubleValue() 相当于 |
float |
floatValue() 在缩小原始转换之后,将 current value作为 |
double |
get() 返回当前值。 |
double |
getThenReset() |
int |
intValue() 在缩小原始转换之后,将 current value作为 |
long |
longValue() 在缩小原始转换之后,将 current value作为 |
void |
reset() 重置维护对身份值更新的变量。 |
String |
toString() 返回当前值的字符串表示形式。 |
Inherited methods |
|
---|---|
From class java.lang.Number
|
|
From class java.lang.Object
|
DoubleAccumulator (DoubleBinaryOperator accumulatorFunction, double identity)
使用给定的累加器函数和标识元素创建一个新实例。
Parameters | |
---|---|
accumulatorFunction |
DoubleBinaryOperator : a side-effect-free function of two arguments |
identity |
double : identity (initial value) for the accumulator function |
double doubleValue ()
相当于 get()
。
Returns | |
---|---|
double |
the current value |
float floatValue ()
在缩小原始转换之后,将 current value作为 float
返回。
Returns | |
---|---|
float |
the numeric value represented by this object after conversion to type float . |
double get ()
返回当前值。 返回的值不是原子快照; 在没有并发更新的情况下调用会返回一个准确的结果,但在计算该值时发生的并发更新可能不会被合并。
Returns | |
---|---|
double |
the current value |
double getThenReset ()
等同于get()
然后是reset()
。 这种方法可能适用于多线程计算之间的静态点。 如果有与此方法同时发生的更新,则返回的值不能保证是重置前发生的最终值。
Returns | |
---|---|
double |
the value before reset |
int intValue ()
在缩小原始转换之后,将 current value作为 int
返回。
Returns | |
---|---|
int |
the numeric value represented by this object after conversion to type int . |
long longValue ()
在缩小原始转换之后,将 current value作为 long
返回。
Returns | |
---|---|
long |
the numeric value represented by this object after conversion to type long . |
void reset ()
重置维护对身份值更新的变量。 此方法可能是创建新更新程序的有用替代方法,但只有在没有并发更新时才有效。 由于此方法本质上是活泼的,因此只有在知道没有线程正在同时更新时才应使用它。
String toString ()
返回当前值的字符串表示形式。
Returns | |
---|---|
String |
the String representation of the current value |