- java.lang.Object
-
- java.lang.Number
-
- java.util.concurrent.atomic.LongAccumulator
-
- All Implemented Interfaces:
-
Serializable
public class LongAccumulator extends Number implements 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
-
-
构造方法摘要
构造方法 Constructor 描述 LongAccumulator(LongBinaryOperator accumulatorFunction, long identity)
使用给定的累加器函数和identity元素创建一个新的实例。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 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表示形式。-
Methods inherited from class java.lang.Number
byteValue, shortValue
-
-
-
-
构造方法详细信息
-
LongAccumulator
public LongAccumulator(LongBinaryOperator accumulatorFunction, long identity)
使用给定的累加器函数和identity元素创建一个新的实例。- 参数
-
accumulatorFunction
- 两个参数的无副作用函数 -
identity
- 累加器函数的标识(初始值)
-
-
方法详细信息
-
accumulate
public void accumulate(long x)
具有给定值的更新。- 参数
-
x
- 值
-
get
public long get()
返回当前值。 返回的值不是原子快照; 在没有并发更新的情况下调用返回一个准确的结果,但是在计算该值时发生的并发更新可能未被并入。- 结果
- 当前值
-
reset
public void reset()
重置维持更新到标识值的变量。 此方法可能是创建新更新程序的有用替代方法,但仅在没有并发更新时才有效。 因为这个方法本质上是racy,所以只有当已知没有线程同时更新时才应该使用它。
-
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
之后表示的数值。
-
-