了解原子性CAS操作

CAS 操作

Atomic 相关的类采用 CAS 操作来实现原子性

CAS 操作依赖底层硬件的 CAS 指令,CAS 指令有两个步骤:冲突检测和更新操作,但是这两个步骤合起来成为 一个原子性操作

CAS 指令需要 3 个操作数,:内存位置(V),旧的预期值(A),新值(B).CAS 指令执行时,首先比较内存位置 V 处的值和 A 的值是否相等(冲突检测),如果相等,就用新值 B 覆盖 A(更新操作),否则,就什么都不做,所以一般循环执行 CAS 操作,直到成功为止.

Unsafe 类里面的 compareAndSwapXXX 方法最后都会变成与硬件相关的 CAS 指令. 从 Unsafe 这个类名就可以看出, 作者不希望我们随便使用,因为这是不安全的,
为什么不安全:因为这个类可以直接操作内存;还有其他的一些底层操作, 比如将线程挂起,就是调用了 Unsafe 类的 park 方法