Java并发CAS中的ABA问题

96 篇文章 3 订阅 ¥9.90 ¥99.00
本文探讨了Java并发编程中的CAS(Compare and Swap)操作导致的ABA问题,解释了ABA问题产生的原因,即在不关心中间过程的情况下,线程可能错误地认为变量值未被修改。此外,还介绍了如何使用AtomicStampedReference来解决ABA问题,通过改变stamp值来确保变量状态的正确跟踪,防止因ABA问题造成的潜在错误。
摘要由CSDN通过智能技术生成

1. ABA产生的原因

CAS会导致“ABA问题”。

CAS算法实现一个重要前提需要取出内存中某时刻的数据并在当下时刻比较并替换,那么在这个时间差类会导致数据的变化。

比如说一个线程1从内存位置V中取出A,这时候另一个线程2也从内存中取出A,并且线程2进行了一些操作将值变成了B,然后线程2又将V位置的数据 变成了A,这时候线程1进行CAS操作发现内存中仍然是A,然后线程1操作成功。只关注开始和结尾,不关心中间过程。

尽管线程1的CAS操作成功,但是不代表这个过程就是没有问题的。

2. ABA会带来哪些问题,请举例说明

 

 

3. 解决ABA问题的方案

原子更新字段类AtomicStampedReference可以解决该类问题,每次更新会改变stamp的值,故变量的值发生A->B->A改变时,尽管最后还是值A,但是该变量的stamp发生了改变,避免了变量没有发生改变的假象发生

 

 

4. 参考链接

https://mp.weixin.qq.com/s/sqqK0B2GH2zBNWCoz48m

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值