public static void main(String[] args) {
//---------------------------- ABA问题解决方式AtomicStampedReference--------------------------------
AtomicStampedReference<Integer> integerAtomicStampedReference=new AtomicStampedReference<>(1,1);
new Thread(new Runnable() {
@Override
public void run() {
int stamp = integerAtomicStampedReference.getStamp();
System.out.println("stamp:"+stamp);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
integerAtomicStampedReference.compareAndSet(1,2,1,++stamp);
integerAtomicStampedReference.compareAndSet(2,1,2,++stamp);
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
// int stamp = integerAtomicStampedReference.getStamp();
// System.out.println("stamp:"+stamp);
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
int stamp = integerAtomicStampedReference.getStamp();
System.out.println("stamp:"+stamp);
boolean compareResult = integerAtomicStampedReference.compareAndSet(1, 2, stamp, stamp+1);
System.out.println("compareResult:"+compareResult);
System.out.println("stamp:"+integerAtomicStampedReference.getStamp());
}
}).start();
while (Thread.activeCount()>2){
}
}
解决cas aba的问题 解决方案–AtomicStampedReference的引用加版本号
最新推荐文章于 2026-03-01 10:53:37 发布
该代码示例展示了如何使用AtomicStampedReference解决ABA问题。在两个线程中,一个尝试修改值并更新stamp,另一个线程在稍后的时间点尝试进行比较并交换操作。通过使用stamp来确保数据的完整性,避免了ABA问题。
942

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



