java多线程开发03——CAS
cas全称是Compare and Swap,即比较再交换,乐观锁的一种实现方式,是一种轻量级锁,JUC 中很多工具类的实现就是基于 CAS 的。
CAS 是怎么实现线程安全的?
线程在读取数据时不进行加锁,在准备写回数据时,先去查询原值,操作的时候比较原值是否修改,若未被其他线程修改则写回,若已被修改,则重新执行读取流程。
比较+更新 整体是一个原子操作
存在问题
循环时间长CPU开销大: 由于没有使用锁,线程不进入阻塞,消耗CPU的时间片进行循环,CPU的开销大
**ABA问题:**就是这个值被改了,但是又改回来了,看不出差别,简单来说可以加个版本号,时间戳。