Compare and Sweep
比较并替换。
CAS 是一种乐观锁,它的基本思想是:先读取内存中的值,然后进行比较,如果内存中的值和期望值相等,就将新值写入内存,否则不断重试。
volatile 只能保证可见性,无法保证原子性。
CAS 的实现
CAS:
Compare and swap
, 比较并交换。是一种无锁的非阻塞算法的实现。CAS 有三个操作数
- V:需要读写的内存值
- A:旧的预期值
- B:要修改的更新值。
当前仅当 V == A 时,CAS 通过原子方式用新值 B 来更新 V 的值,否则不会执行任何操作。
CAS 实现的原理
CAS 是通过 JNI 来调用 CPU 的原子指令(cmpxchg 指令)来实现的。