CAS
CAS(Compare And Swap),即比较和交换。CAS 是一条 CPU 指令,该指令是原子的,可以完成比较和交换操作。Java 中,一般不会直接使用 CAS,而是使用基于 CAS 封装好的类。
// CAS 的伪代码
boolean CAS(address, expectValue, swapValue) {
if (&address == expectedValue) {
&address = swapValue;
return true;
}
return false;
}
CAS 的典型应用:
- 实现原子类
- 实现自旋锁
实现原子类
Java 标准库提供了一系列基于 CAS 实现的'原子'类。
Java 不支持运算符重载,因此对于封装 CAS 的类对象,不能用++/–来直接操作;
// 通过原子类保证线程安全
private static AtomicInteger ret = new AtomicInteger(0);
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(() -> {
for (int i = 0; i < 50000; i++) {
ret.getAndIncrement(); // getAndIncrement: i++
}
});
Thread t2 = new Thread(() -> {
( ; i < ; i++) {
ret.getAndIncrement();
}
});
t1.start();
t1.join();
t2.join();
System.out.println(ret);
}


