一、作用
二、代码示例
package com.learning.atomic;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.atomic.AtomicMarkableReference;
/**
* @Author wangyouhui
* @Description 标记资源是否被修改过
**/
@Slf4j
public class AtomicMarkableReferenceLearning {
public static void main(String[] args) {
GarbageBag bag = new GarbageBag("垃圾装满");
AtomicMarkableReference<GarbageBag> reference = new AtomicMarkableReference<>(bag, true);
log.info("主线程开始");
GarbageBag previous = reference.getReference();
new Thread(()->{
log.info("线程1修改");
bag.setDescription("空垃圾袋");
boolean success = reference.compareAndSet(bag, bag, true, false);
log.info("线程1修改成功");
}).start();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.info("主线程改变状态");
boolean success = reference.compareAndSet(previous, new GarbageBag("空垃圾袋"), true, false);
log.info("是否成功?"+success);
log.info(reference.getReference().toString());
}
}
@Data
@AllArgsConstructor
class GarbageBag{
private String description;
}
三、结果截图
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5763111ab938e5984b03e92a42af7c33.png)