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

📅  最后修改于: 2023-12-03 15:16:20.285000             🧑  作者: Mango

Java中的AtomicInteger getAndAdd()方法及示例

在多线程环境下,如果多个线程同时对同一个变量进行自增操作,可能会导致不正确的结果。为了解决这个问题,Java提供了AtomicInteger类,它提供了一些原子性操作方法来保证线程安全。

AtomicInteger类中的getAndAdd()方法是其中之一,它的作用是先获取当前值,然后将该值增加指定的增量。下面是该方法的语法:

public final int getAndAdd(int delta)
  • 参数delta:要增加的增量值

  • 返回值:增加前的值

示例代码如下所示:

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicIntegerExample {

    private static AtomicInteger counter = new AtomicInteger(0);

    public static void main(String[] args) {
        System.out.println("初始值:" + counter.get()); // 输出初始值

        int oldValue = counter.getAndAdd(5); // 增加5并获取增加前的值
        System.out.println("增加前的值:" + oldValue);
        System.out.println("增加后的值:" + counter.get());

        int newValue = counter.getAndAdd(10); // 再次增加10并获取增加前的值
        System.out.println("增加前的值:" + newValue);
        System.out.println("增加后的值:" + counter.get());
    }
}

运行以上示例代码,输出结果如下:

初始值:0
增加前的值:0
增加后的值:5
增加前的值:5
增加后的值:15

在示例代码中,首先创建了一个AtomicInteger对象counter,并将其初始值设置为0。然后调用getAndAdd(5)方法,该方法会将counter的值增加5,并返回增加前的值0。接着调用getAndAdd(10)方法,该方法会将counter的值再次增加10,并返回增加前的值5。

由输出结果可见,getAndAdd()方法确实能够返回增加前的值,并且每次增加后的值也能正确地被获取到。

需要注意的是,虽然AtomicInteger类的方法是原子性的,但在多线程环境下,仍需谨慎操作。在上述示例中,多个线程同时调用getAndAdd()方法可能会导致结果的不确定性。若要确保线程安全,可以使用其他原子性操作方法,如compareAndSet()方法。

请注意格式化markdown来查看以上解答。