SIGN IN SIGN UP
Snailclimb / JavaGuide UNCLAIMED

Java 面试 & 后端通用面试指南,覆盖计算机基础、数据库、分布式、高并发、系统设计与 AI 应用开发

0 0 3 Java

AtomicMarkableReference 是可以解决ABA问题的

因为AtomicMarkableReference是通过内部类Pair实现数据存储,每次替换都是通过Pair.of方法new一个类出来进行替换原先的值
如果ABA出现,那么最后的A肯定是一个新的Pair实例,即当前的A和之前的A不是同一个实例,当现场使用compareAndSet则会返回false
以下是compareAndSet的实现:
Pair<V> current = pair;
        return
            expectedReference == current.reference &&
            expectedMark == current.mark &&
            ((newReference == current.reference &&
              newMark == current.mark) ||
             casPair(current, Pair.of(newReference, newMark)));
B
BaoPiao committed
ea1b70d7039227ed28a95b02247d043394bd78ed
Parent: ff9efdd
Committed by GitHub <noreply@github.com> on 3/19/2022, 9:19:59 AM