AtomicInteger 概述
AtomicInteger
类是 Java 并发包(java.util.concurrent.atomic
)中的一员。它提供了一种线程安全的方式来对整型变量进行原子操作。通过使用 AtomicInteger
类,开发者可以在多线程环境中对整型变量进行安全地增加、减少等操作,而不需要使用显式的同步机制。
常用方法
下面是 AtomicInteger
类中一些常用的方法:
-
get()
:获取当前的整型值。 -
set(int newValue)
:设置为指定的新值。 -
getAndSet(int newValue)
:设置为指定的新值,并返回旧值。 -
incrementAndGet()
:原子地将当前值加1,然后返回增加后的值。 -
decrementAndGet()
:原子地将当前值减1,然后返回减少后的值。 -
getAndIncrement()
:返回当前值,然后将当前值加1。 -
getAndDecrement()
:返回当前值,然后将当前值减1。 -
addAndGet(int delta)
:原子地将给定值与当前值相加,然后返回相加后的值。 -
getAndAdd(int delta)
:返回当前值,然后将给定值与当前值相加。 -
compareAndSet(int expect, int update)
:如果当前值等于预期值,则原子地将该值设置为给定的更新值。
示例代码
下面是一个示例代码,演示了 AtomicInteger
类中一些常用的方法的合集:
import java.util.concurrent.atomic.AtomicInteger;
public class AtomicIntegerMethodsExample {
public static void main(String[] args) {
// 创建一个初始值为0的AtomicInteger对象
AtomicInteger atomicInt = new AtomicInteger(0);
// 1. get() 方法:获取当前的整型值
int currentValue = atomicInt.get();
System.out.println("Current value: " currentValue);
// 2. set(int newValue) 方法:设置为指定的新值
atomicInt.set(10);
System.out.println("New value after set: " atomicInt.get());
// 3. getAndSet(int newValue) 方法:设置为指定的新值,并返回旧值
int oldAndNewValue = atomicInt.getAndSet(20);
System.out.println("Old value: " oldAndNewValue);
System.out.println("Value after getAndSet: " atomicInt.get());
// 4. incrementAndGet() 方法:原子地将当前值加1,并返回增加后的值
int incrementedValue = atomicInt.incrementAndGet();
System.out.println("Incremented value: " incrementedValue);
// 5. decrementAndGet() 方法:原子地将当前值减1,并返回减少后的值
int decrementedValue = atomicInt.decrementAndGet();
System.out.println("Decremented value: " decrementedValue);
// 6. addAndGet(int delta) 方法:原子地将给定值与当前值相加,并返回相加后的值
int addResult = atomicInt.addAndGet(5);
System.out.println("Value after addAndGet: " addResult);
// 7. getAndAdd(int delta) 方法:返回当前值,然后将给定值与当前值相加
int oldValue = atomicInt.getAndAdd(8);
System.out.println("Old value before getAndAdd: " oldValue);
System.out.println("Value after getAndAdd: " atomicInt.get());
// 8. compareAndSet(int expect, int update) 方法:如果当前值等于预期值,则原子地将该值设置为给定的更新值
boolean isSuccess = atomicInt.compareAndSet(33, 100); // 如果当前值是33,则设置为100
System.out.println("compareAndSet result: " isSuccess);
System.out.println("Value after compareAndSet: " atomicInt.get());
}
}
结论
AtomicInteger
类提供了一种简单且高效的方式来实现对整型变量的原子操作。通过使用 AtomicInteger
类,开发者可以避免使用显式的同步机制(如 synchronized
关键字),从而提高程序的并发性能。在多线程环境中,特别是需要频繁对整型变量进行操作的情况下,建议使用 AtomicInteger
类来确保操作的线程安全性。