什么是CAS?
比较并交换(compare and set)
public class CASDemo{
public static void main(String[] args){
AtomicInteger atomicInteger=new AtomicInteger(5);
boolean flag1=atomicInteger.compareAndSet(5,2019);
//result==2019
int result1=atomicInteger.get();
boolean flag2=atomicInteger.compareAndSet(5,2001);
//修改失败,result==2019
int result1=atomicInteger.get();
}
}
atomicInteger.compareAndSet(a,b)
1)前一个值为期望值,期望物理内存的值与该值相同
2)若真实值与期望值相同就将值改为b,并写入物理内存,若不同,则不写
CAS底层原理
unsafe类的getAndAddInte()方法+CAS思想
var1---AtomicIntger对象本身
var2---该对象值的引用地址
var4---需要变动的数量
var5---用过var1和var2找出的主内存中真实的值
用该对