应用场景
乐观锁
并发容器
原子类
Unsafe 类
Unsafe 是 CAS 的核心类。Java 无法直接访问底层操作系统,而是通过本地 (native) 方法来访问。不过尽管如此,JVM 还是开了一个后门,JDK 中有一个类 Unsafe,它提供了硬件级别的原子操作
valueOffset 表示的是变量值在内存中的偏移地址,因为 Unsafe 就是根据内存偏移地址获取数据的原值的,这样我们就能通过 unsafe 来实现 CAS 了
文字描述
我认为 V 的值应该是 A,如果是的话那我就把它改成 B,如果不是 A (说明被别人修改过了),那我就不修改了,避免多人同时修改导致出错
CAS 有三个操作数:内存值 V
、预期值 A
、要修改的值 B
,当且仅当预期值 A和内存值 V 相同时,才将内存值修改为 B,否则什么都不做。最后返回现在的 V 值
CAS 缺点
ABA 问题
自旋时间过长