AtomicStampedReference api詳解

今天學習AtomicStampedReference類,該類是JUC原子包中的類,通過單元測試代碼把所有public api方法跑了一遍,大致瞭解了底層實現

package test.java.util.concurrent.atomic;


import java.util.concurrent.atomic.AtomicStampedReference;
import org.junit.Test;

/**
 * AtomicStampedReference的測試類
 *
 * @author zqw
 * @date 2020-06-20 23:04:34
 */
public class AtomicStampedReferenceTest {
        /**
         * 構造函數,參數一爲要標記的對象引用
         * 參數二爲標記布爾值
         * toString 返回ObjectclassName@hashCode()
         * void
         * @throws
         * @date 2020/6/20 21:40
         */
        @Test
        public void testConstruct0()throws Exception{
                AtomicStampedReferenceTest test=new AtomicStampedReferenceTest();
                AtomicStampedReference testObj=new AtomicStampedReference(test,123);
                System.out.println(testObj.toString());
        }
        /**
         * 獲取引用對象
         * @throws
         * @date 2020/6/20 21:40
         */
        @Test
        public void testGetReference(){
                AtomicStampedReferenceTest test=new AtomicStampedReferenceTest();
                AtomicStampedReference testObj=new AtomicStampedReference(test,123);
                System.out.println(testObj.getReference());
        }
        /**
         * 獲取引用對象標記值
         * @throws
         * @date 2020/6/20 21:40
         */
        @Test
        public void testGetStamp(){
                AtomicStampedReferenceTest test=new AtomicStampedReferenceTest();
                AtomicStampedReference testObj=new AtomicStampedReference(test,123);
                System.out.println(testObj.getStamp());
        }
        /**
         * 獲取引用對象標記值
         * @throws
         * @date 2020/6/20 21:40
         */
        @Test
        public void testGet(){
                AtomicStampedReferenceTest test=new AtomicStampedReferenceTest();
                AtomicStampedReference testObj=new AtomicStampedReference(test,123);
                int[] intArrs=new int[]{123333,321};
                System.out.println(testObj.get(intArrs));
                System.out.println();

        }
        /**
         * CompareAndSet和WeakCompareAndSet相同
         * 將引用對象根據期望的值判斷,true則設置成新值和新標記值
         * false則不設置
         * @throws
         * @date 2020/6/20 21:40
         */
        @Test
        public void testWeakCompareAndSet(){
                AtomicStampedReferenceTest test=new AtomicStampedReferenceTest();
                AtomicStampedReferenceTest test1=new AtomicStampedReferenceTest();
                AtomicStampedReference testObj=new AtomicStampedReference(test,123);
                System.out.println(testObj.weakCompareAndSet(test,test1,123,321));
                System.out.println(testObj.getReference());
                System.out.println(testObj.getStamp());
        }
        /**
         * CompareAndSet和WeakCompareAndSet相同
         * 將引用對象根據期望的值判斷,true則設置成新值和新標記值
         * false則不設置
         * @throws
         * @date 2020/6/20 21:40
         */
        @Test
        public void testCompareAndSet(){
                AtomicStampedReferenceTest test=new AtomicStampedReferenceTest();
                AtomicStampedReferenceTest test1=new AtomicStampedReferenceTest();
                AtomicStampedReference testObj=new AtomicStampedReference(test,123);
                System.out.println(testObj.compareAndSet(test,test1,123,321));
                System.out.println(testObj.getReference());
                System.out.println(testObj.getStamp());
        }
        /**
         * 將引用對象設置成新值和新標記值
         * @throws
         * @date 2020/6/20 21:40
         */
        @Test
        public void testSet(){
                AtomicStampedReferenceTest test=new AtomicStampedReferenceTest();
                AtomicStampedReferenceTest test1=new AtomicStampedReferenceTest();
                AtomicStampedReference testObj=new AtomicStampedReference(test,123);
                testObj.set(test1,321);
                System.out.println(testObj.getReference());
                System.out.println(testObj.getStamp());
        }

        /**
         *改變引用對象標記值
         * @throws
         * @date 2020/6/20 21:40
         */
        @Test
        public void testAttemptStamp(){
                AtomicStampedReferenceTest test=new AtomicStampedReferenceTest();
                AtomicStampedReference testObj=new AtomicStampedReference(test,123);
                testObj.attemptStamp(test,321);
                System.out.println(testObj.getStamp());
        }
}

 

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