1.CAS是什么?
Compare And Swap,比较并交换,它是一条CPU并发原语。功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的。
调用Unsafe类中的CAS方法,JVM会帮我们实现出CAS的汇编指令,这是依赖与硬件的功能实现的原子操作。CAS是一种系统原语,原语属于操作系统用于范畴,是由若干条指令组成,用于完成某个功能的一个过程,并且原语的执行必须是连续的,执行过程中不允许被中断,也就是说CAS是一条CPU的原子指令,不会造成数据不一致问题
2.CAS底层原理?
自旋锁,Unsafe类
atomicInteger.getAndIncrement()的源码:
unsafe.getAndAddInt()方法的源码:
3.AtomicInteger为什么要用CAS而不是synchronized?
synchronized加锁,同一时间段只允许有一个线程能访问,一致性得到了保障,但是并发性下降;CAS反复进行比较,直到比较成功,这样既保证了一致性,又提高了并发性
4.CAS的缺点?
如果循环时间长,开销很大
只能保障一个共享变量的原子操作
ABA问题
5.如何解决ABA问题?
AtomicStampedReference,带时间戳的原子引用