📅  最后修改于: 2023-12-03 14:42:43.327000             🧑  作者: Mango
在多线程并发编程中,锁机制是实现同步访问共享资源的常用手段,但是使用锁会带来一定的性能开销,尤其是在高并发场景下,效率低下。此时,无锁算法成为了一种性能更高的选择。
Java中提供了AtomicInteger类用于实现无锁算法,本文将对其进行介绍和使用案例演示。
AtomicInteger是Java中用于实现原子操作的一个类,它可以在不使用锁的情况下实现对变量的原子操作。
AtomicInteger提供了以下常用方法:
下面通过一个简单的案例来演示AtomicInteger的用法。
假设有一个全局变量counter,多个线程需要对其进行自增操作,我们可以使用AtomicInteger来实现对counter的原子操作。
import java.util.concurrent.atomic.AtomicInteger;
public class AtomicCounterExample {
private static AtomicInteger counter = new AtomicInteger(0); // 初始化为0
public static void main(String[] args) {
// 创建10个线程对counter进行累加操作
for (int i = 0; i < 10; i++) {
new Thread(() -> {
for (int j = 0; j < 10000; j++) {
counter.incrementAndGet(); // 自增操作
}
}).start();
}
// 等待所有线程完成
try {
Thread.sleep(1000); // 让主线程等待1秒,等待其他线程累加完毕
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("累加后的结果为:" + counter.get()); // 获取累加后的结果
}
}
上述代码创建了10个线程对counter进行自增操作,每个线程累加10000次。由于AtomicInteger的自增操作是原子的,所以我们可以得到正确的累加结果。
Java中的AtomicInteger可以实现无锁算法,它提供了一系列原子操作方法,可以用于多线程并发编程中对变量的原子操作。
使用AtomicInteger可以实现高效的访问共享变量,降低锁带来的性能开销。但是由于需要额外的CAS操作,所以在低并发量的场景下,使用synchronized可能更为简单和高效。