今天學習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());
}
}