CAS 是 compare and swap 的意思,是 CPU 指令级别的一个原子操作。将旧值与目标内存地址中的值进行比较,如果一致,就说明没有其他线程修改过这个值,将新值更新到内存地址中;如果不一致,不会进行更新,而是返回当前的值,然后再次执行 CAS 操作。

当多个线程同时尝试使用 CAS 更新同一个变量时,其中一个线程会成功更新变量的值,剩下的会失败。

CAS 的缺点有:

  • 如果循环的次数过多,对性能开销大;
  • CAS 只能保证一个共享变量的原子性;
  • 会引发 ABA 问题。

在 Java 中的 atomic 类实现 了 CAS 方法:

private AtomicBoolean locked = new AtomicBoolean(false);
public boolean lock() {
    return locked.compareAndSet(false, true);
}

AtomicLongAtomicReference 等 atomic 类也有类似实现。