如何解决ABA问题
通过原子引用,每次对这个数据进行操作的时候,都会使版本号加一
数据 | 版本号 |
---|---|
1 | 1 |
0 | 2 |
1 | 3 |
这样就可以通过版本号而不是数据的值来判断是否被修改了,也可以解决ABA问题
Java中的解决方法
public static void main(String[] args) {
AtomicInteger a = new AtomicInteger(); //初始的原子类
a.getAndIncrement();
AtomicStampedReference<Integer> b = new AtomicStampedReference<>(10,1); //添加版本号的原子类,版本号为1
b.compareAndSet(10,11,b.getStamp(),b.getStamp()+1); //在修改初始值和期望值之后添加当前版本号和预期版本号
}