原子变量提供的如incrementAndGet()、compareAndSet()等方法保证了操作的原子性,可以避免使用锁,从而减少线程之间的竞争和上下文切换,提高性能。
import java.util.concurrent.atomic.AtomicInteger;
public class AtomicIntegerExample {
public static void main(String[] args) {
AtomicInteger atomicInteger = new AtomicInteger(0);
// 以原子方式将当前值更新为新值
atomicInteger.set(20);
// 使用静态工具方法进行原子操作
int oldValue = atomicInteger.getAndAdd(5); // 将当前值增加5,并返回旧值
int newValue = atomicInteger.addAndGet(10); // 将当前值增加10,并返回新值
oldValue = atomicInteger.getAndIncrement(); // 将当前值增加1,并返回旧值
newValue = atomicInteger.incrementAndGet(); // 将当前值增加1,并返回新值
oldValue = atomicInteger.getAndSet(20); // 将当前值设置为20,并返回旧值
}
}
原子变量常见的使用场景:
1.计数器:在多线程环境中,如果你需要一个计数器来跟踪事件发生的次数,可以使用AtomicInteger或AtomicLong。
public class Counter {
private final AtomicInteger count = new AtomicInteger(0);
public void increment() {
count.incrementAndGet();
}
public int getCount() {
return count.get();
}
}