并发之CAS

319 阅读1分钟

CAS是什么

CAS是compareAndSet方法的简称,以原子的方式实现。如果当前值等于expect,则更新为update,否则不更新。

CAS是乐观的,可以将其视为计算机的基本操作。

使用synchronized成本较高,需要获取锁、释放锁,获取不到锁的话还需要等待,还有线程的上下文切换。

原子类

基于CAS实现原子操作

循环中,先获取当前值,计算期望值,用CAS的方式进行更新,如果更新失败则以自旋的方式重新获取但前值并更新,直到更新成功。

CAS带来的问题及解决方式

ABA问题

ABA问题是指当前值为A,另一个线程将值改为B后又修改为A,当前线程的CAS操作无法分辨当前值是否发生过变化。

ABA问题解决方法

时间戳或版本号AtomicStampedReference