CAS相关概念
CAS compare and swap 比较并交换
CAS的原理主要是unsafe类,以及自旋锁
1、unsafe类
位于rt.jar包下 这里用AtomicInteger举例并实现,先看一个小案例
import java.util.concurrent.atomic.AtomicInteger;
public class CASDemo {
public static void main(String[] args) {
AtomicInteger atomicInteger=new AtomicInteger(3);
System.out.println(atomicInteger.compareAndSet(3,5)+"\t"+atomicInteger);
System.out.println(atomicInteger.compareAndSet(7,9)+"\t"+atomicInteger);
}
}
其底层实现可以点进去看看
这里可以看到,传入的参数一个为期望值与自己工作内存的副本变量做对比,一个用来更新值,而他的底层this表示当前对象,vauleOffset则表示内存偏移量,也即地址,看下面的更深层的源码,则由c实现,而内存偏移量可以理解为指针,直接指向主内存的值。再深层的原理为cpu的并发原语,这里待学习。
2、从AtomicInteger深入理解CAS
同样的AtomicInteger的相关方法其实也是一样的。
3、更深层次的概念涉及到汇编?![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/70c4ca777ae498330b8942e4cb33bca9.png)
4、CAS有哪些问题
一个是自旋的优缺点,另一个则是ABA问题,那什么是ABA问题,我们再开一篇