3.5 引用类型的原子操作类AtomicMarkableReference使用示例

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章