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