📅  最后修改于: 2023-12-03 15:16:20.285000             🧑  作者: Mango
在多线程环境下,如果多个线程同时对同一个变量进行自增操作,可能会导致不正确的结果。为了解决这个问题,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来查看以上解答。