package dev.elaine.concurrency;

import java.util.concurrent.atomic.AtomicStampedReference;

public final class AtomicAbaSample {
    private AtomicAbaSample() {
    }

    public static void main(String[] args) {
        AtomicStampedReference<String> state = new AtomicStampedReference<>("A", 0);
        int observedStamp = state.getStamp();

        state.compareAndSet("A", "B", 0, 1);
        state.compareAndSet("B", "A", 1, 2);

        boolean updated = state.compareAndSet("A", "C", observedStamp, observedStamp + 1);
        System.out.printf("值=%s，版本=%d，旧观察能否更新=%s%n",
                state.getReference(), state.getStamp(), updated);
    }
}
