问题描述
我有一个用例来更新 long 变量中事件的纪元时间。这个变量也会有很多并发读取和写入。以下是详细要求:
- 读取和写入的完成速度非常快
- 读取可能返回也可能不返回最新结果,但不应返回损坏的结果
- 写入是对新纪元值的简单赋值,不需要加法、减法或计算
哪种替代方案更适合我的用例:
- 带有 volatile 关键字的原始 long
- AtomicLong
- LongAccumulator,accumulatorFunction 为
(x,y) -> y
- 两个不同的变量 - 一个仅用于读取值,另一个用于写入值的 volatile 变量,写入变量之一的值在某个时间间隔内被复制到读取变量
解决方法
使用 AtomicLong
,因为它有助于避免显式锁定的额外开销