Java_CAS实现过程
CAS
CAS 是指 compare and swap , compare and exchange 比较并且交换
使用 ”synchronized“ 保证线程的安全性,但是效率比较低
在 jdk5 以后增加一些原子类,保证数据的递增,不用加锁
常见的原子类:AtomicBoolean,AtomicInteger,AtomicLong
1.大致实现原理
CAS工作原理:
线程读取到当前的值,计算结果并返回设置到内存,设置时读取内存中的是否跟线程之前读到的值相等,相等的话说明数据没有被修改过,直接把值赋上去,如果不相等的话,再次读取计算再次设置.....直到设置成功。
CAS底层实现:
JVM 虚拟机实现,时使用 C++ 实现的。
ABA问题:
线程再次设置值的时候发现值与自己读取的相等,这时可能经过多个线程的修改,修改之后值没变。这就是ABA问题。
如何避免ABA问题:
- 加上版本号,判断值是否相等,再判断版本号是否一致。
- 加上布尔值,判断是否修改过。