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

 

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