Unsafe : 在虚拟机启动类目录下 rt.jar 下的 sum.misc.Unsafe 通过内存偏移量获取到内存的变量值
CAS :通过Unsafe获取到值与当前类的值进行比较,如果相同,数据进行更新,如果不同数据更新失败,重复上述动作,继续获取内存偏移量数据进行比对,直至比对成功。
CAS缺点::
1.在极端条件下会出现CPU利用率飙升的情况。
2.无法保证对多变量进行原子性操作(只能保证单个共享变量),此时建议用Synchronized
3.ABA问题,当两个线程同时访问共享变量,但A线程执行时间过长,B线程执行时间短但多次执行,且在执行过程中数据发生了多次改变最后变为最初值,此时如果业务只关心开始和结果,此问题造成影响不大,如果在执行中需要监控过程中的数据变换,那么就会造成结果与预期不一致。(解决方案:增加数据版本控制 AtomicStampedReference )
CAS工作原理:
CAS具体应用代码: