根据b站UP主狂神说JUC课程所写的个人学习笔记 视频地址:https://www.bilibili.com/video/BV1B7411L7tE?from=search&seid=14761503393031794075
什么是cas
CAS是英文单词Compare and Swap的缩写,翻译过来就是比较并替换。
CAS机制中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。
更新一个变量的时候,只有当变量的预期值A和内存地址V当中的实际值相同时,才会将内存地址V对应的值修改为B。
public class CASDemo {
//cas 比较并交换
public static void main(String[] args) {
AtomicInteger atomicInteger = new AtomicInteger(2020);
//对于我们平时写的sql:乐观锁
// public final boolean compareAndSet(int expectedValue, int newValue)
//如果期望的值达到了就更新,否则就不更新
atomicInteger.compareAndSet(2020,2021);
System.out.println(atomicInteger.get());
//public final int getAndIncrement() {
// return U.getAndAddInt(this, VALUE, 1);
// }
atomicInteger.compareAndSet(2021,2020);
System.out.println(atomicInteger.get());
atomicInteger.compareAndSet(2020,6666);
System.out.println(atomicInteger.get());
}
}
unsafe类
缺点:
1.循环耗时
2.一次性只能保证一个共享变量的原子性
3.存在ABA问题