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