Unsafe类 + CAS思想

Unsafe : 在虚拟机启动类目录下 rt.jar 下的 sum.misc.Unsafe  通过内存偏移量获取到内存的变量值

CAS :通过Unsafe获取到值与当前类的值进行比较,如果相同,数据进行更新,如果不同数据更新失败,重复上述动作,继续获取内存偏移量数据进行比对,直至比对成功。

CAS缺点::

        1.在极端条件下会出现CPU利用率飙升的情况。

        2.无法保证对多变量进行原子性操作(只能保证单个共享变量),此时建议用Synchronized

        3.ABA问题,当两个线程同时访问共享变量,但A线程执行时间过长,B线程执行时间短但多次执行,且在执行过程中数据发生了多次改变最后变为最初值,此时如果业务只关心开始和结果,此问题造成影响不大,如果在执行中需要监控过程中的数据变换,那么就会造成结果与预期不一致。(解决方案:增加数据版本控制  AtomicStampedReference )

    

 

CAS工作原理:

 

Unsafe类 + CAS思想

 

CAS具体应用代码:

 

Unsafe类 + CAS思想