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;
}
@Override
public 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 空垃圾袋