01-022【jvm】CAS与原子类ABA问题
CAS即Compare and Swap ,体现了乐观锁思想 CAS CAS是什么? CAS:即Compare-And-Swap,它是一条CPU并发原语,它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的。 获取共享变量时,为了保证该变量的可见性,需要使用volatile修饰。结合CAS和volatile可以实现无锁并发,适用于竞争不激烈、多核CPU的场景下。 底层原理 CAS并发原语 体现在java语言中就是sun.misc. UnSafe类 中的各个方法。调用UnSafe类中的CAS方法,JVM会帮我们实现CAS汇编指令。这是一种 完全依赖于硬件 的功能,通过它实现了原子操作。再次强调,由于CAS是一种系统原语,原语属于操作系统用语范畴,是由若干条指令组成的,用于完成某个功能的一个过程,并且 原语的执行必须是连续的,在执行过程中不允许被中断 ,也就是说 CAS是一条CPU的原子指令,不会造成所谓的数据不一致的问题 。 以AtomicInteger为例,源码 源码 public final int getAndIncrement ( ) { return unsafe . getAndAddInt ( this , valueOffset , 1 ) ; } 那么UnSafe类是什么? 在rt.jar中,jdk的基础类,其中方法均由native修饰