📌  相关文章
📜  Java中的 AtomicLong accumulateAndGet() 方法及示例(1)

📅  最后修改于: 2023-12-03 14:42:43.970000             🧑  作者: Mango

Java中的 AtomicLong accumulateAndGet() 方法及示例

AtomicLong 是 Java 中的一种原子类,它能够在多线程环境下实现原子操作,也就是说,在任意时刻只有一个线程能够访问和修改这个变量。accumulateAndGet()AtomicLong 提供的一个原子操作方法,用于对 AtomicLong 变量执行累加操作并返回结果。

accumulateAndGet() 方法的语法
public final long accumulateAndGet(long newValue, LongBinaryOperator accumulatorFunction)
  • newValue:要追加到当前 AtomicLong 变量上的值
  • accumulatorFunction:一个用于计算新值的函数,它的参数是原来的值和 newValue,返回一个 long 值。
主要应用场景

accumulateAndGet() 适用于以下场景:

  1. 需要在多个线程中实现 long 类型变量的累加操作;
  2. 需要直接获取累加后的值。
示例代码

下面我们来看一个累加操作的示例:

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
    }
}

上面的代码中,我们创建了一个初始值为 0AtomicLong 变量。接着,我们通过 accumulateAndGet() 方法,在变量上追加 10,并通过 Lambda 表达式计算新值。最后输出计算后的结果 10。接下来,我们再将 5 累加到上面的结果中,得到 15。运行结果如下:

result : 10
result : 15

从运行结果可以看出,每次修改 AtomicLong 变量时都是原子操作,每个线程都能够保证获得正确的结果。