一:概述
CAS,Compare And Swap,即比较并交换。在Java多并非的操作中,很多地方都用到了CAS操作,如AQS同步组件、Atomic原子类操作都是以CAS实现的,甚至concurrentHashMap在版本1.8中也调用了CAS+Synchronized。可以说CAS在JUC中举足轻重。
二:CAS分析
在CAS中有三个参数:内存中存放的值V,旧的预期值A,和要更新的值B,当且仅当V == A 的时候,才会进行V = B操作,否则什么都不干。可以看下其伪代码
if(this.value == A){
this.value = B;
return false;
}else{
return false;
}
在Atomic原子类操作都用到了CAS,看下下面AtomicInteger中使用CAS。
private static final Unsafe unsafe = Unsafe.getUnsafe();
private static final long valueOffset;
static {
try {
valueOffset = unsafe.obj