AtomicInteger api詳解

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

package test.java.util.concurrent.atomic;

import org.junit.Test;

import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.IntBinaryOperator;
import java.util.function.IntUnaryOperator;

/**
 * @version 1.0
 * @Package test.java.util.concurrent
 * @Project:jdk-source
 * @authur:zhangqingwei
 * @date:2020/6/7 21:04
 */
public class AtomicIntegerTest {
    /**
     *  通過整數值初始化構造函數
     * @throws
     * @date 2020/6/16 23:46
     */
    @Test
    public void testConstructInt(){
        AtomicInteger atomicInteger=new AtomicInteger(3);
        System.out.println(atomicInteger.get());
    }
    /**
     *  無參構造函數,默認爲0
     * @throws
     * @date 2020/6/16 23:46
     */
    @Test
    public void testConstructEmpty(){
        AtomicInteger atomicInteger=new AtomicInteger();
        System.out.println(atomicInteger.get());
    }
    /**
     * 獲取value值
     *
     * @throws
     * @date 2020/6/16 23:46
     */
    @Test
    public void testGet(){
        AtomicInteger atomicInteger=new AtomicInteger();
        System.out.println(atomicInteger.get());
    }
    /**
     * 設置value值
     *
     * @throws
     * @date 2020/6/16 23:46
     */
    @Test
    public void testSet(){
        AtomicInteger atomicInteger=new AtomicInteger(4);
        atomicInteger.set(43);
        System.out.println(atomicInteger.get());
    }
    /**
     * 設置value值
     *
     * @throws
     * @date 2020/6/16 23:46
     */
    @Test
    public void testLazySet(){
        AtomicInteger atomicInteger=new AtomicInteger(3);
        atomicInteger.lazySet(33);
        System.out.println(atomicInteger.get());
    }
    /**
     * 獲取value值並設置成新值
     *
     * @throws
     * @date 2020/6/16 23:46
     */
    @Test
    public void testGetAndSet(){
        AtomicInteger atomicInteger=new AtomicInteger(3);
        System.out.println(atomicInteger.getAndSet(223));
        System.out.println(atomicInteger.get());
    }
    /**
     * 如果value爲expect參數值,則更新成新值並返回true
     * 否則返回false
     *
     * @throws
     * @date 2020/6/16 23:46
     */
    @Test
    public void testCompareAndSet(){
        AtomicInteger atomicInteger=new AtomicInteger(3);
        System.out.println(atomicInteger.compareAndSet(3,33));
        System.out.println(atomicInteger.get());
    }
    /**
     * 如果value爲expect參數值,則更新成新值並返回true
     * 否則返回false
     *
     * @throws
     * @date 2020/6/16 23:46
     */
    @Test
    public void testWeakCompareAndSet(){
        AtomicInteger atomicInteger=new AtomicInteger(3);
        System.out.println(atomicInteger.weakCompareAndSet(3,23));
        System.out.println(atomicInteger.get());
    }
    /**
     * 獲取value值並將值加一
     *
     * @throws
     * @date 2020/6/16 23:46
     */
    @Test
    public void testGetAndIncrement(){
        AtomicInteger atomicInteger=new AtomicInteger(3);
        System.out.println(atomicInteger.getAndIncrement());
        System.out.println(atomicInteger.get());
    }
    /**
     * 獲取value值並將值減一
     *
     * @throws
     * @date 2020/6/16 23:46
     */
    @Test
    public void testGetAndDecrement(){
        AtomicInteger atomicInteger=new AtomicInteger(3);
        System.out.println(atomicInteger.getAndDecrement());
        System.out.println(atomicInteger.get());
    }
    /**
     * 獲取value值並將值加一
     *
     * @throws
     * @date 2020/6/16 23:46
     */
    @Test
    public void testGetAndAdd(){
        AtomicInteger atomicInteger=new AtomicInteger(3);
        System.out.println(atomicInteger.getAndAdd(3));
        System.out.println(atomicInteger.get());
    }
    /**
     * 將值加一併獲取value值
     *
     * @throws
     * @date 2020/6/16 23:46
     */
    @Test
    public void testIncrementAndGet(){
        AtomicInteger atomicInteger=new AtomicInteger(3);
        System.out.println(atomicInteger.incrementAndGet());
    }
    /**
     * 將值減一併獲取value值
     *
     * @throws
     * @date 2020/6/16 23:46
     */
    @Test
    public void testDecrementAndGet(){
        AtomicInteger atomicInteger=new AtomicInteger(3);
        System.out.println(atomicInteger.decrementAndGet());
    }
    /**
     * 將值增加對應的值並獲取value值
     *
     * @throws
     * @date 2020/6/16 23:46
     */
    @Test
    public void testAddAndGet(){
        AtomicInteger atomicInteger=new AtomicInteger(3);
        System.out.println(atomicInteger.addAndGet(33));
    }
    /**
     * 獲取value值並更新成新值
     *
     * @throws
     * @date 2020/6/16 23:46
     */
    @Test
    public void testGetAndUpdate(){
        AtomicInteger atomicInteger=new AtomicInteger(3);
        IntUnaryOperator operator=new IntUnaryOperator() {
            @Override
            public int applyAsInt(int operand) {
                return 33;
            }
        };
        System.out.println(atomicInteger.getAndUpdate(operator));
        System.out.println(atomicInteger.get());
    }
    /**
     * 更新成新值並獲取value值
     *
     * @throws
     * @date 2020/6/16 23:46
     */
    @Test
    public void testUpdateAndGet(){
        AtomicInteger atomicInteger=new AtomicInteger(3);
        IntUnaryOperator operator=new IntUnaryOperator() {
            @Override
            public int applyAsInt(int operand) {
                return 33;
            }
        };
        System.out.println(atomicInteger.updateAndGet(operator));
    }
    /**
     * 獲取value值並更新成新值
     *
     * @throws
     * @date 2020/6/16 23:46
     */
    @Test
    public void testGetAndAccumulate(){
        AtomicInteger atomicInteger=new AtomicInteger(3);
        IntBinaryOperator operator=new IntBinaryOperator() {
            @Override
            public int applyAsInt(int left, int right) {
                return 332;
            }
        };
        System.out.println(atomicInteger.getAndAccumulate(23,operator));
        System.out.println(atomicInteger.get());
    }
    /**
     * 更新成新值並獲取value值
     *
     * @throws
     * @date 2020/6/16 23:46
     */
    @Test
    public void testAccumulateAndGet(){
        AtomicInteger atomicInteger=new AtomicInteger(3);
        IntBinaryOperator operator=new IntBinaryOperator() {
            @Override
            public int applyAsInt(int left, int right) {
                return 332;
            }
        };
        System.out.println(atomicInteger.accumulateAndGet(23,operator));
    }
    /**
     * Integer.toString()
     *
     * @throws
     * @date 2020/6/16 23:46
     */
    @Test
    public void testToString(){
        AtomicInteger atomicInteger=new AtomicInteger(33);
        System.out.println(atomicInteger.toString());
    }
    /**
     * 獲取value的int值
     *
     * @throws
     * @date 2020/6/16 23:46
     */
    @Test
    public void testIntValue(){
        AtomicInteger atomicInteger=new AtomicInteger(33);
        System.out.println(atomicInteger.intValue());
    }
    /**
     * 獲取value的float值
     *
     * @throws
     * @date 2020/6/16 23:46
     */
    @Test
    public void testFloatValue(){
        AtomicInteger atomicInteger=new AtomicInteger(33);
        System.out.println(atomicInteger.floatValue());
    }
    /**
     * 獲取value的long值
     *
     * @throws
     * @date 2020/6/16 23:46
     */
    @Test
    public void testLongValue(){
        AtomicInteger atomicInteger=new AtomicInteger(33);
        System.out.println(atomicInteger.longValue());
    }
    /**
     * 獲取value的double值
     *
     * @throws
     * @date 2020/6/16 23:46
     */
    @Test
    public void testDoubleValue(){
        AtomicInteger atomicInteger=new AtomicInteger(33);
        System.out.println(atomicInteger.doubleValue());
    }
}

 

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