AtomicMarkableReference是什么
实例

@Slf4j(topic = "c.Test38")public class Test38 {public static void main(String[] args) throws InterruptedException {GarbageBag bag = new GarbageBag("装满了垃圾");// 参数2 mark 可以看作一个标记,表示垃圾袋满了AtomicMarkableReference<GarbageBag> ref = new AtomicMarkableReference<>(bag, true);log.debug("start...");GarbageBag prev = ref.getReference();log.debug(prev.toString());new Thread(() -> {log.debug("start...");bag.setDesc("空垃圾袋");ref.compareAndSet(bag, bag, true, false);log.debug(bag.toString());},"保洁阿姨").start();sleep(1);log.debug("想换一只新垃圾袋?");boolean success = ref.compareAndSet(prev, new GarbageBag("空垃圾袋"), true, false);log.debug("换了么?" + success);log.debug(ref.getReference().toString());}}class GarbageBag {String desc;public GarbageBag(String desc) {this.desc = desc;}public void setDesc(String desc) {this.desc = desc;}@Overridepublic String toString() {return super.toString() + " " + desc;}}
01:20:27.060 c.Test38 [main] - start... 01:20:27.061 c.Test38 [main] - cn.itcast.test.GarbageBag@61baa894 装满了垃圾 01:20:27.090 c.Test38 [保洁阿姨] - start... 01:20:27.090 c.Test38 [保洁阿姨] - cn.itcast.test.GarbageBag@61baa894 空垃圾袋 01:20:28.104 c.Test38 [main] - 想换一只新垃圾袋? 01:20:28.104 c.Test38 [main] - 换了么?false 01:20:28.104 c.Test38 [main] - cn.itcast.test.GarbageBag@61baa894 空垃圾袋
