关于cas问题产生的aba问题解决
Posted tecnologycc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于cas问题产生的aba问题解决相关的知识,希望对你有一定的参考价值。
问题: 当利用automickinteger 进行cas 操作的时候
compareandset 是没有错的。但是当多线程的时候 会有问题。会产生aba问题。
就比如说当 变量a =1 然后, 1线程去读他 做compareandset前 是1.
这时候2线程 对a +1 又 减了1 1线程去拿的时候可能判断 还是1 所以 进行了compareannset 并且可以执行。 因为比较了 1 = 1 这种值计算是没有问题的
但是会产生很多问题。状态发生了变化。但是 线程1 不知道。操作栈的时候就会出现这种问题。
利用AtomicStampedReference(无非加了一个版本号。)
AutomicStampedReference<Integer> automicRef = new AtomicStampedReference<>();
automicRef.compareandset(预期值,修改值,预期版本号, 修改后的版本号)
以上是关于关于cas问题产生的aba问题解决的主要内容,如果未能解决你的问题,请参考以下文章
Java并发多线程编程——原子类AtomicInteger的ABA问题及原子更新引用