CAS是什么
CAS是compareAndSet方法的简称,以原子的方式实现。如果当前值等于expect,则更新为update,否则不更新。
CAS是乐观的,可以将其视为计算机的基本操作。
使用synchronized成本较高,需要获取锁、释放锁,获取不到锁的话还需要等待,还有线程的上下文切换。
原子类
基于CAS实现原子操作
循环中,先获取当前值,计算期望值,用CAS的方式进行更新,如果更新失败则以自旋的方式重新获取但前值并更新,直到更新成功。
CAS带来的问题及解决方式
ABA问题
ABA问题是指当前值为A,另一个线程将值改为B后又修改为A,当前线程的CAS操作无法分辨当前值是否发生过变化。
ABA问题解决方法
时间戳或版本号AtomicStampedReference