AtomicMarkableReference:
基本和AtomicStampedReference差不多,AtomicStampedReference主要关注版本号,即reference的值被修改了多少次;AtomicMarkableReference是使用boolean mark来标记reference是否被修改过
示例如下
public class MyAtomicMarkableReference {
static AtomicMarkableReference<String> atomicStampedReference = new AtomicMarkableReference("tom",false);
public static void main(String[] args) {
boolean oldMarked = atomicStampedReference.isMarked();
String oldReference = atomicStampedReference.getReference();
System.out.println("初始化之后的标记:"+oldMarked);
System.out.println("初始化之后的值:"+oldReference);
String newReference = "jerry";
boolean b =atomicStampedReference.compareAndSet(oldReference,newReference,true,false);
if(!b){
System.out.println("Mark不一致,无法修改Reference的值");
}
b =atomicStampedReference.compareAndSet(oldReference,newReference,false,true);
if(b){
System.out.println("Mark一致,修改reference的值为jerry");
}
System.out.println("修改成功之后的Mark:"+atomicStampedReference.isMarked());
System.out.println("修改成功之后的值:"+atomicStampedReference.getReference());
}
}
结果
初始化之后的标记:false
初始化之后的值:tom
Mark不一致,无法修改Reference的值
Mark一致,修改reference的值为jerry
修改成功之后的Mark:true
修改成功之后的值:jerry