📅  最后修改于: 2023-12-03 14:42:43.970000             🧑  作者: Mango
AtomicLong
是 Java 中的一种原子类,它能够在多线程环境下实现原子操作,也就是说,在任意时刻只有一个线程能够访问和修改这个变量。accumulateAndGet()
是 AtomicLong
提供的一个原子操作方法,用于对 AtomicLong
变量执行累加操作并返回结果。
public final long accumulateAndGet(long newValue, LongBinaryOperator accumulatorFunction)
newValue
:要追加到当前 AtomicLong
变量上的值accumulatorFunction
:一个用于计算新值的函数,它的参数是原来的值和 newValue
,返回一个 long
值。accumulateAndGet()
适用于以下场景:
long
类型变量的累加操作;下面我们来看一个累加操作的示例:
import java.util.concurrent.atomic.AtomicLong;
public class AtomicLongDemo {
public static void main(String[] args) {
AtomicLong atomicLong = new AtomicLong(0);
long result = atomicLong.accumulateAndGet(10, (x, y) -> x + y);
System.out.println("result : " + result); // 输出 10
result = atomicLong.accumulateAndGet(5, (x, y) -> x + y);
System.out.println("result : " + result); // 输出 15
}
}
上面的代码中,我们创建了一个初始值为 0
的 AtomicLong
变量。接着,我们通过 accumulateAndGet()
方法,在变量上追加 10
,并通过 Lambda
表达式计算新值。最后输出计算后的结果 10
。接下来,我们再将 5
累加到上面的结果中,得到 15
。运行结果如下:
result : 10
result : 15
从运行结果可以看出,每次修改 AtomicLong
变量时都是原子操作,每个线程都能够保证获得正确的结果。