java中long值的原子赋值

问题描述

我有一个用例来更新 long 变量中事件的纪元时间。这个变量也会有很多并发读取和写入。以下是详细要求:

  1. 读取和写入的完成速度非常快
  2. 读取可能返回也可能不返回最新结果,但不应返回损坏的结果
  3. 写入是对新纪元值的简单赋值,不需要加法、减法或计算

哪种替代方案更适合我的用例:

  1. 带有 volatile 关键字的原始 long
  2. AtomicLong
  3. LongAccumulator,accumulatorFunction 为 (x,y) -> y
  4. 两个不同的变量 - 一个仅用于读取值,另一个用于写入值的 volatile 变量,写入变量之一的值在某个时间间隔内被复制到读取变量

解决方法

使用 AtomicLong,因为它有助于避免显式锁定的额外开销