AtomicInteger 类是 Java.util.concurrent.atomic 包中的一个类,用于实现原子操作的整数类。它提供了 compareAndExchange() 和 compareAndSet() 两种方法来进行原子操作。
compareAndExchange() 方法的定义如下:
public final int compareAndExchange(int expectedValue, int newValue)
该方法比较 AtomicInteger 当前的值与期望值 expectedValue,如果相等,则将 AtomicInteger 的值设置为 newValue,并返回 true。如果不相等,则不进行任何操作,并返回 false。
compareAndSet() 方法的定义如下:
public final boolean compareAndSet(int expectedValue, int newValue)
该方法比较 AtomicInteger 当前的值与期望值 expectedValue,如果相等,则将 AtomicInteger 的值设置为 newValue,并返回 true。如果不相等,则不进行任何操作,并返回 false。
两者的区别在于 compareAndExchange() 方法会返回原来 AtomicInteger 的值,而 compareAndSet() 方法则只返回一个布尔值。
下面是一个使用示例:
import java.util.concurrent.atomic.AtomicInteger;
public class Main {
public static void main(String[] args) {
AtomicInteger atomicInteger = new AtomicInteger(10);
// 使用 compareAndExchange() 方法
int expectedValue1 = 10;
int newValue1 = 20;
boolean exchanged1 = atomicInteger.compareAndExchange(expectedValue1, newValue1);
System.out.println("Exchanged: " + exchanged1); // 输出:Exchanged: true
System.out.println("Old value: " + expectedValue1); // 输出:Old value: 10
System.out.println("New value: " + atomicInteger.get()); // 输出:New value: 20
// 使用 compareAndSet() 方法
int expectedValue2 = 10;
int newValue2 = 30;
boolean exchanged2 = atomicInteger.compareAndSet(expectedValue2, newValue2);
System.out.println("Exchanged: " + exchanged2); // 输出:Exchanged: false
System.out.println("Old value: " + atomicInteger.get()); // 输出:Old value: 20
System.out.println("New value: " + atomicInteger.get()); // 输出:New value: 20
}
}
注意,compareAndExchange() 和 compareAndSet() 方法都是原子操作,它们保证多线程环境下操作的原子性,避免出现竞态条件。