count++底层运算的过程;
基于 CAS(比较和交换)实现非阻塞同步(基于 CPU 硬件技术支持)
a) 内存地址(V)
b) 期望数据值(A)
c) 需要更新的值(B)
CAS 算法支持无锁状态下的并发更新,但可能会出现 ABA 问题,长时间自
旋问题
假如说你有一个值,我拿到这个值是0,想把它变成2,我拿到1用cas操作,期望值是
1,准备变成2,对象是Object,在这个过程中没有一个线程改过我这个值,肯定可
修改。如果有一个线程在这个过程中把这个1修改成了2后来又变回1,中间值更改过
但是不影响我后面的操作,这就是ABA问题。
解决方法:如果是int类型的,最终值是你期望的。没有关系。确实想要解决的话,就是加版本,做任何一个值的修改,修改完加一,后面检查的时候连同版本号一起检查。
参考:https://blog.youkuaiyun.com/weixin_44998030/article/details/105325844