CAS原子性操作
重要网址 https://blog.csdn.net/wufaliang003/article/details/78797203 ABA问题详细介绍 一、什么是CAS操作 cas全称是compare and swap 比较交换 传入三个参数,旧的值、期待的值、想替换的值。会获得变量的之前的值,与期待的值相比,如果相同替换值给变量,如果不同返回false。 cas是unsafe类下的native方法,使用c++进行实现,主要是直接操作cpu指令进行原子性操作。 cas使用于低并发的场景。 二、CAS和synchronized适用场景 1、对于资源竞争较少的情况,使用synchronized同步锁进行线程阻塞和唤醒切换以及用户态内核态间的切换操作额外浪费消耗cpu资源; 而CAS基于硬件实现,不需要进入内核,不需要切换线程,操作自旋几率较少,因此可以获得更高的性能。 2、对于资源竞争严重的情况,CAS自旋的概率会比较大,从而浪费更多的CPU资源,效率低于synchronized。 使用CAS在线程冲突严重时,会大幅降低程序性能;CAS只适合于线程冲突较少的情况使用。而synchronized在jdk1.6之后,已经改进优化。synchronized的底层实现主要依靠Lock-Free的队列,基本思路是自旋后阻塞,竞争切换后继续竞争锁,稍微牺牲了公平性,但获得了高吞吐量