今天学习AtomicReference类,该类是JUC原子包中的类,通过单元测试代码把所有public api方法跑了一遍,大致了解了底层实现
package test.java.util.concurrent.atomic; import java.util.concurrent.atomic.AtomicReference; import java.util.function.BinaryOperator; import java.util.function.UnaryOperator; import org.junit.Test; /** * AtomicReference的测试类 * * @author zqw * @date 2020-06-20 21:51:08 */ public class AtomicReferenceTest { /** * 无参构造函数 * * @author zqw * @date 2020-06-20 21:51:08 */ @Test public void testConstruct0()throws Exception{ AtomicReference testObj=new AtomicReference(); System.out.println(testObj.get()); } /** * 设置引用对象构造函数 * * @author zqw * @date 2020-06-20 21:51:08 */ @Test public void testConstruct1()throws Exception{ AtomicReferenceTest test=new AtomicReferenceTest(); AtomicReference testObj=new AtomicReference(test); System.out.println(testObj.get()); } /** * 获取引用对象 * * @author zqw * @date 2020-06-20 21:51:08 */ @Test public void testGet(){ AtomicReferenceTest test=new AtomicReferenceTest(); AtomicReference testObj=new AtomicReference(test); System.out.println(testObj.get()); } /** * 设置引用对象 * * @author zqw * @date 2020-06-20 21:51:08 */ @Test public void testSet(){ AtomicReferenceTest test=new AtomicReferenceTest(); AtomicReferenceTest test1=new AtomicReferenceTest(); AtomicReference testObj=new AtomicReference(test); testObj.set(test1); System.out.println(test); System.out.println(test1); System.out.println(testObj.get()); } /** * 设置引用对象 *set()和lazySet相同 * @author zqw * @date 2020-06-20 21:51:08 */ @Test public void testLazySet(){ AtomicReferenceTest test=new AtomicReferenceTest(); AtomicReferenceTest test1=new AtomicReferenceTest(); AtomicReference testObj=new AtomicReference(test); testObj.lazySet(test1); System.out.println(test); System.out.println(test1); System.out.println(testObj.get()); } /** * 如果引用对象为expect的值,则设置成新值,否则不设置 * * * @author zqw * @date 2020-06-20 21:51:08 */ @Test public void testCompareAndSet(){ AtomicReferenceTest test=new AtomicReferenceTest(); AtomicReferenceTest test1=new AtomicReferenceTest(); AtomicReference testObj=new AtomicReference(test); testObj.compareAndSet(test,test1); System.out.println(testObj.get()); } /** * 如果引用对象为expect的值,则设置成新值,否则不设置 * *和CompareAndSet用法一样 * @author zqw * @date 2020-06-20 21:51:08 */ @Test public void testWeakCompareAndSet(){ AtomicReferenceTest test=new AtomicReferenceTest(); AtomicReferenceTest test1=new AtomicReferenceTest(); AtomicReference testObj=new AtomicReference(test); testObj.weakCompareAndSet(test,test1); System.out.println(testObj.get()); } /** * 获取旧的引用对象,并设置成新值 * @author zqw * @date 2020-06-20 21:51:08 */ @Test public void testGetAndSet(){ AtomicReferenceTest test=new AtomicReferenceTest(); AtomicReferenceTest test1=new AtomicReferenceTest(); AtomicReference testObj=new AtomicReference(test); testObj.getAndSet(test1); System.out.println(testObj.get()); } /** * 获取旧的引用对象,并设置成新值 * @author zqw * @date 2020-06-20 21:51:08 */ @Test public void testGetAndUpdate(){ AtomicReferenceTest test=new AtomicReferenceTest(); AtomicReferenceTest test1=new AtomicReferenceTest(); AtomicReference testObj=new AtomicReference(test); UnaryOperator operator=new UnaryOperator() { @Override public Object apply(Object o) { return test1; } }; System.out.println(testObj.getAndUpdate(operator)); System.out.println(testObj.get()); } /** * 设置成新值并获取引用对象 * @author zqw * @date 2020-06-20 21:51:08 */ @Test public void testUpdateAndGet(){ AtomicReferenceTest test=new AtomicReferenceTest(); AtomicReferenceTest test1=new AtomicReferenceTest(); AtomicReference testObj=new AtomicReference(test); UnaryOperator operator=new UnaryOperator() { @Override public Object apply(Object o) { return test1; } }; System.out.println(testObj.updateAndGet(operator)); System.out.println(testObj.get()); } /** * 获取旧的引用对象,并设置成新值 * @author zqw * @date 2020-06-20 21:51:08 */ @Test public void testGetAndAccumulate(){ AtomicReferenceTest test=new AtomicReferenceTest(); AtomicReferenceTest test1=new AtomicReferenceTest(); AtomicReference testObj=new AtomicReference(test); BinaryOperator operator=new BinaryOperator() { @Override public Object apply(Object o, Object o2) { return o2; } }; System.out.println(testObj.getAndAccumulate(test1, operator)); System.out.println(testObj.get()); } /** * 设置成新值并获取引用对象 * @author zqw * @date 2020-06-20 21:51:08 */ @Test public void testAccumulateAndGet(){ AtomicReferenceTest test=new AtomicReferenceTest(); AtomicReferenceTest test1=new AtomicReferenceTest(); AtomicReference testObj=new AtomicReference(test); BinaryOperator operator=new BinaryOperator() { @Override public Object apply(Object o, Object o2) { return o2; } }; testObj.getAndAccumulate(test,operator); System.out.println(testObj.get()); } /** * 获取引用对象的toString * @author zqw * @date 2020-06-20 21:51:08 */ @Test public void testToString(){ AtomicReference testObj=new AtomicReference(); System.out.println(testObj.toString()); } }