CAS
CompareAndSwap 利用 cpu 的特殊指令
内存值(V) 预期值(A) 要修改的值(B)
应用:
乐观锁、并发容器、原子类
AtomicInteger 加载 UnSafe 工具,UnSafe 工具可以直接操作内存
UnSafe 类是 CAS 的核心类。Java 无法直接访问底层的操作系统,而是通过本地 native 方法来访问
UnSafe 类提供了硬件级别的原子操作
UnSafe 中的 compareAndSwapInt 方法:
1. 方法先拿到变量 value 在内存中的地址
2. 通过 Atomic::cmpxchg 实现原子性的比较和替换
缺点:
1. ABA 问题 (添加版本号解决)
2. 自旋时间过长