📅  最后修改于: 2023-12-03 15:31:49.940000             🧑  作者: Mango
在多线程环境下,对于一个共享资源的操作,为了避免竞争条件和数据不一致的问题,需要使用线程安全的类库。Java中提供了Atomic包,包含了一些原子操作的类,其中AtomicLong是一个长整型原子变量。
AtomicLong提供了getAndIncrement()方法,即先返回当前的值,再将当前值加1。
public final long getAndIncrement()
下面是一个使用AtomicLong getAndIncrement()方法的示例:
import java.util.concurrent.atomic.AtomicLong;
public class AtomicLongExample {
private static AtomicLong counter = new AtomicLong(0);
public static void main(String[] args) {
int numThreads = 10;
Thread[] threads = new Thread[numThreads];
for (int i = 0; i < numThreads; i++) {
threads[i] = new Thread(new Runnable() {
public void run() {
for (int j = 0; j < 100; j++) {
System.out.println(counter.getAndIncrement());
}
}
});
threads[i].start();
}
for (int i = 0; i < numThreads; i++) {
try {
threads[i].join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
代码中创建了一个AtomicLong类型的计数器counter,然后创建了10个线程,每个线程都会执行100次counter的getAndIncrement()方法,获取当前计数器的值并将其加1,最后输出到控制台上。在输出结果中,每个线程都获得了唯一而连续的计数值,表明了AtomicLong的原子性和线程安全性。
AtomicLong getAndIncrement()方法是一个非常实用的原子操作,具有线程安全的特性,可以在多线程环境下保证数据的一致性和正确性。在使用时需要注意,该方法只会对当前的值加1,并不会对对象的值进行修改,需要将返回值重新赋值给原对象。