思维逻辑阐述
首先回答什么是CAS
1 什么是CAS
CAS 的全程叫做比较交换,重点在于比较和交换
比较
比较的是内存中的值是否为预期值
交换
内存中的值等于预期值就将值进行修改
参与对象
- 内存值A
- 预期值B
- 更改值 C
当A=B的时候,会将A改变为C
2 CAS底层原理
Java CAS的底层实现类是unsafe类
unsafe 类
public final int getAndAddInt(Objectvar1, long var2, int var4) {
int var5;
do {
var5 =this.getIntVolatile(var1, var2);
}
while(!this.compareAndSwapInt(var1,var2, var5, var5 + var4));
return var5;
}
如果修改失败,会一直尝试修改,直到修改成功
3 CAS有哪些缺点
- 循环时间长,开销大
- 只能保证一个共享变量的原则操作
- 存在ABA问题