AtomicLongArray api詳解

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

 

package test.java.util.concurrent.atomic;


import java.util.concurrent.atomic.AtomicLongArray;
import java.util.function.LongBinaryOperator;
import java.util.function.LongUnaryOperator;

import org.junit.Test;

/**
 * AtomicLongArray的測試類
 *
 * @author zqw
 * @date 2020-06-18 23:28:10
 */
public class AtomicLongArrayTest {
        /**
         *  通過size初始化AtomicLongArray數組類,其實就是將
         *  long[] array=new long[length];
         * @throws
         * @date 2020/6/16 23:46
         */
        @Test
        public void testConstruct0()throws Exception{
                AtomicLongArray testObj=new AtomicLongArray(2);
                System.out.println(testObj.toString());
        }
        /**
         *  通過數組初始化AtomicLongArray數組類,其實就是將
         *  long[] array=longArr.clone();
         *  clone()方法是將intArr內容複製到一個新的相同大小的數組空間,
         * 並將地址賦給array
         * @throws
         * @date 2020/6/16 23:46
         */
        @Test
        public void testConstruct1()throws Exception{
                long[] intArr={1,2,3};
                AtomicLongArray testObj=new AtomicLongArray(intArr);
                System.out.println(testObj.toString());
        }
        /**
         *  array.length
         * @throws
         * @date 2020/6/16 23:46
         */
        @Test
        public void testLength(){
                long[] intArr={1,2,3};
                AtomicLongArray testObj=new AtomicLongArray(intArr);
                System.out.println(testObj.length());
        }
        /**
         *  獲取數組下標的內容,需要檢查是否越界
         * @throws
         * @date 2020/6/16 23:46
         */
        @Test
        public void testGet(){
                long[] intArr={1,2,3};
                AtomicLongArray testObj=new AtomicLongArray(intArr);
                System.out.println(testObj.get(2));
        }
        /**
         *  設置數組下標的內容爲新的值,unsafe.putIntVolatile設置值
         * @throws
         * @date 2020/6/16 23:46
         */
        @Test
        public void testSet(){
                long[] intArr={1,2,3};
                AtomicLongArray testObj=new AtomicLongArray(intArr);
                testObj.set(2,23);
                System.out.println(testObj.get(2));

        }
        /**
         *  設置數組下標的內容爲新的值,unsafe.putOrderedInt
         * @throws
         * @date 2020/6/16 23:46
         */
        @Test
        public void testLazySet(){
                long[] intArr={1,2,3};
                AtomicLongArray testObj=new AtomicLongArray(intArr);
                testObj.lazySet(2,23);
                System.out.println(testObj.get(2));

        }
        /**
         *  返回下標的值,並設置成新的值
         * @throws
         * @date 2020/6/16 23:46
         */
        @Test
        public void testGetAndSet(){
                long[] intArr={1,2,3};
                AtomicLongArray testObj=new AtomicLongArray(intArr);
                System.out.println(testObj.getAndSet(2,23));
                System.out.println(testObj.get(2));
        }
        /**
         *  如果下標的值爲expect的值,則更新成新值,返回true
         *  否則不更新,返回false
         * @throws
         * @date 2020/6/16 23:46
         */
        @Test
        public void testCompareAndSet(){
                long[] intArr={1,2,3};
                AtomicLongArray testObj=new AtomicLongArray(intArr);
                System.out.println(testObj.compareAndSet(2,3,23));
                System.out.println(testObj.get(2));
        }
        /**
         *  如果下標的值爲expect的值,則更新成新值,返回true
         *  否則不更新,返回false
         * @throws
         * @date 2020/6/16 23:46
         */
        @Test
        public void testWeakCompareAndSet(){
                long[] intArr={1,2,3};
                AtomicLongArray testObj=new AtomicLongArray(intArr);
                System.out.println(testObj.weakCompareAndSet(2,3,23));
                System.out.println(testObj.get(2));

        }
        /**
         *  返回下標的值,並將值加一
         * @throws
         * @date 2020/6/16 23:46
         */
        @Test
        public void testGetAndIncrement(){
                long[] intArr={1,2,3};
                AtomicLongArray testObj=new AtomicLongArray(intArr);
                System.out.println(testObj.getAndIncrement(2));
                System.out.println(testObj.get(2));
        }
        /**
         *  返回下標的值,並將值減一
         * @throws
         * @date 2020/6/16 23:46
         */
        @Test
        public void testGetAndDecrement(){
                long[] intArr={1,2,3};
                AtomicLongArray testObj=new AtomicLongArray(intArr);
                System.out.println(testObj.getAndDecrement(2));
                System.out.println(testObj.get(2));
        }
        /**
         *  返回下標的值,並將值加一
         * @throws
         * @date 2020/6/16 23:46
         */
        @Test
        public void testGetAndAdd(){
                long[] intArr={1,2,3};
                AtomicLongArray testObj=new AtomicLongArray(intArr);
                System.out.println(testObj.getAndAdd(2,23));
                System.out.println(testObj.get(2));
        }
        /**
         *  將值加一,並返回下標的值
         * @throws
         * @date 2020/6/16 23:46
         */
        @Test
        public void testIncrementAndGet(){
                long[] intArr={1,2,3};
                AtomicLongArray testObj=new AtomicLongArray(intArr);
                System.out.println(testObj.incrementAndGet(2));
                System.out.println(testObj.get(2));
        }
        /**
         *  將值減一,並返回下標的值
         * @throws
         * @date 2020/6/16 23:46
         */
        @Test
        public void testDecrementAndGet(){
                long[] intArr={1,2,3};
                AtomicLongArray testObj=new AtomicLongArray(intArr);
                System.out.println(testObj.decrementAndGet(2));
                System.out.println(testObj.get(2));
        }
        /**
         *  將值加一,並返回下標的值
         * @throws
         * @date 2020/6/16 23:46
         */
        @Test
        public void testAddAndGet(){
                long[] intArr={1,2,3};
                AtomicLongArray testObj=new AtomicLongArray(intArr);
                System.out.println(testObj.addAndGet(2,23));
                System.out.println(testObj.get(2));
        }
        /**
         *  返回下標的值,並更新成新值
         * @throws
         * @date 2020/6/16 23:46
         */
        @Test
        public void testGetAndUpdate(){
                long[] intArr={1,2,3};
                AtomicLongArray testObj=new AtomicLongArray(intArr);
                LongUnaryOperator operator=new LongUnaryOperator() {
                        @Override
                        public long applyAsLong(long operand) {
                                return 33;
                        }
                };
                System.out.println(testObj.getAndUpdate(2,operator));
                System.out.println(testObj.get(2));
        }
        /**
         *  更新成新值並返回下標的值
         * @throws
         * @date 2020/6/16 23:46
         */
        @Test
        public void testUpdateAndGet(){
                long[] intArr={1,2,3};
                AtomicLongArray testObj=new AtomicLongArray(intArr);
                LongUnaryOperator operator=new LongUnaryOperator() {
                        @Override
                        public long applyAsLong(long operand) {
                                return 33;
                        }
                };
                System.out.println(testObj.updateAndGet(2,operator));
                System.out.println(testObj.get(2));
        }
        /**
         *  返回下標值,並更新成新值
         * @throws
         * @date 2020/6/16 23:46
         */
        @Test
        public void testGetAndAccumulate(){
                long[] intArr={1,2,3};
                AtomicLongArray testObj=new AtomicLongArray(intArr);
                LongBinaryOperator operator=new LongBinaryOperator() {
                        @Override
                        public long applyAsLong(long left, long right) {
                                return 332;
                        }
                };
                System.out.println(testObj.getAndAccumulate(2,23,operator));
                System.out.println(testObj.get(2));
        }
        /**
         *  更新成新值並返回下標值
         * @throws
         * @date 2020/6/16 23:46
         */
        @Test
        public void testAccumulateAndGet(){
                long[] intArr={1,2,3};
                AtomicLongArray testObj=new AtomicLongArray(intArr);
                LongBinaryOperator operator=new LongBinaryOperator() {
                        @Override
                        public long applyAsLong(long left, long right) {
                                return 332;
                        }
                };
                System.out.println(testObj.accumulateAndGet(2,23,operator));
                System.out.println(testObj.get(2));
        }
        /**
         *  拼接數組的值,StringBuilder
         *  空返回[],非空返回[2,3,1]
         * @throws
         * @date 2020/6/16 23:46
         */
        @Test
        public void testToString(){
                long[] intArr={1,2,3};
                AtomicLongArray testObj=new AtomicLongArray(intArr);
                System.out.println(testObj.toString());
        }
}

 

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