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发生了改变,避免了变量没有发生改变的假象发生
本文探讨了Java并发编程中的CAS(Compare and Swap)操作导致的ABA问题,解释了ABA问题产生的原因,即在不关心中间过程的情况下,线程可能错误地认为变量值未被修改。此外,还介绍了如何使用AtomicStampedReference来解决ABA问题,通过改变stamp值来确保变量状态的正确跟踪,防止因ABA问题造成的潜在错误。
订阅专栏 解锁全文
1375

被折叠的 条评论
为什么被折叠?



