Java_CAS实现过程

时间:2021-07-21
本文章向大家介绍Java_CAS实现过程,主要包括Java_CAS实现过程使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

CAS

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

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

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

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

1.大致实现原理

CAS工作原理:

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

CAS底层实现:

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

ABA问题:

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

如何避免ABA问题:

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

原文地址:https://www.cnblogs.com/coolyang/p/15041000.html