📅  最后修改于: 2023-12-03 15:01:50.664000             🧑  作者: Mango
在并发编程中,我们需要使用一些线程安全的数据类型来避免并发问题,其中AtomicInteger是一个常用的线程安全的整数类型,它可以保证多线程环境下对该变量进行原子性操作。其中,官方提供了getAndIncrement()方法,该方法会返回当前值并自增1。
public final int getAndIncrement()
import java.util.concurrent.atomic.AtomicInteger;
class AtomicDemo extends Thread {
private static AtomicInteger counter = new AtomicInteger();
public void run() {
System.out.println("Thread " + Thread.currentThread().getName() + " has started");
for (int i = 0; i < 5; i++) {
System.out.println(getName() + ": " + counter.getAndIncrement());
}
System.out.println("Thread " + Thread.currentThread().getName() + " has finished");
}
}
public class Main {
public static void main(String[] args) {
AtomicDemo thread1 = new AtomicDemo();
AtomicDemo thread2 = new AtomicDemo();
thread1.start();
thread2.start();
}
}
代码说明:
首先定义了一个AtomicInteger类型的counter,用于保存原子整数。
定义了一个AtomicDemo类,继承自Thread类,用于模拟多线程环境;在run方法中,通过getAndIncrement()方法获取当前counter的值,并自增1。
在主方法中,创建两个线程,分别执行thread1.start()和thread2.start()方法,模拟多线程环境。运行结果如下:
Thread Thread-0 has started
Thread Thread-1 has started
Thread-0: 0
Thread Thread-1 has finished
Thread-0: 1
Thread-0: 2
Thread-0: 3
Thread-0: 4
Thread Thread-0 has finished
由于getAndIncrement()方法是原子性的,可以保证多线程环境下获取和自增操作的安全,因此线程Thread-0和Thread-1的输出结果可交替出现。