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的引用加版本号
最新推荐文章于 2024-04-24 22:51:49 发布