Java_CAS实现过程


CAS

CAS 是指 compare and swap , compare and exchange 比较并且交换

使用 ”synchronized“ 保证线程的安全性,但是效率比较低

在 jdk5 以后增加一些原子类,保证数据的递增,不用加锁

常见的原子类:AtomicBoolean,AtomicInteger,AtomicLong

1.大致实现原理

CAS工作原理:

? 线程读取到当前的值,计算结果并返回设置到内存,设置时读取内存中的是否跟线程之前读到的值相等,相等的话说明数据没有被修改过,直接把值赋上去,如果不相等的话,再次读取计算再次设置.....直到设置成功。

CAS底层实现:

? JVM 虚拟机实现,时使用 C++ 实现的。

ABA问题:

? 线程再次设置值的时候发现值与自己读取的相等,这时可能经过多个线程的修改,修改之后值没变。这就是ABA问题。

如何避免ABA问题:

  • ? 加上版本号,判断值是否相等,再判断版本号是否一致。
  • ? 加上布尔值,判断是否修改过。