在介绍 CAS 之前,先来了解下什么是乐观锁。
乐观锁(Optimistic Lock)是指对于数据冲突保持一种乐观态度,操作数据时不会对数据加锁,只有到数据提交的时候才通过某种机制来验证数据是否存在冲突。
可以通过使用版本号和 CAS 算法进行实现,本篇博客主要介绍 CAS 算法的概念,以及对 CAS 算法的实现原理进行分析。
什么是 CAS 算法
CAS:Compare and Swap,即比较再交换,其算法公式如下:
函数公式:CAS(V,E,N)
CAS 操作需要我们提供一个期望值,当期望值与当前线程的变量值相同时,说明还没有线程修改该值,当前线程就可以进行修改,也就是执行 CAS 操作。
但如果期望值与当前线程的变量值不符,则说明该值已被其他线程修改,此时不执行更新操作,但可以选择重新读取该变量并尝试再次修改,也可以放弃操作。
CAS 的实现原理
对 java.util.concurrent.atomic 包下的原子类 AtomicInteger 中的 compareAndSet 方法进行分析,可以发现最终调用的是 sum.misc.Unsafe 这个类。
/**