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