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