今天学习AtomicIntegerArray类,该类是JUC原子包中的数组类,通过单元测试代码把所有public api方法跑了一遍,大致了解了底层实现
package test.java.util.concurrent.atomic;
import java.util.concurrent.atomic.AtomicIntegerArray;
import java.util.function.IntBinaryOperator;
import java.util.function.IntUnaryOperator;
import org.junit.Test;
/**
* AtomicIntegerArray的测试类
*
* @author
* @date 2020-06-12 13:59:27
*/
public class AtomicIntegerArrayTest {
/**
* 通过size初始化AtomicIntegerArray数组类,其实就是将
* int[] array=new int[length];
* @throws
* @date 2020/6/16 23:46
*/
@Test
public void testConstruct0()throws Exception{
AtomicIntegerArray testObj=new AtomicIntegerArray(2);
System.out.println(testObj.toString());
}
/**
* 通过数组初始化AtomicIntegerArray数组类,其实就是将
* int[] array=intArr.clone();
* clone()方法是将intArr内容复制到一个新的相同大小的数组空间,
* 并将地址赋给array
* @throws
* @date 2020/6/16 23:46
*/
@Test
public void testConstruct1()throws Exception{
int[] intArr={1,2,3};
AtomicIntegerArray testObj=new AtomicIntegerArray(intArr);
System.out.println(testObj.toString());
}
/**
* array.length
* @throws
* @date 2020/6/16 23:46
*/
@Test
public void testLength(){
int[] intArr={1,2,3};
AtomicIntegerArray testObj=new AtomicIntegerArray(intArr);
System.out.println(testObj.length());
}
/**
* 获取数组下标的内容,需要检查是否越界
* @throws
* @date 2020/6/16 23:46
*/
@Test
public void testGet(){
int[] intArr={1,2,3};
AtomicIntegerArray testObj=new AtomicIntegerArray(intArr);
System.out.println(testObj.get(2));
}
/**
* 设置数组下标的内容为新的值,unsafe.putIntVolatile设置值
* @throws
* @date 2020/6/16 23:46
*/
@Test
public void testSet(){
int[] intArr={1,2,3};
AtomicIntegerArray testObj=new AtomicIntegerArray(intArr);
testObj.set(2,23);
System.out.println(testObj.get(2));
}
/**
* 设置数组下标的内容为新的值,unsafe.putOrderedInt
* @throws
* @date 2020/6/16 23:46
*/
@Test
public void testLazySet(){
int[] intArr={1,2,3};
AtomicIntegerArray testObj=new AtomicIntegerArray(intArr);
testObj.lazySet(2,23);
System.out.println(testObj.get(2));
}
/**
* 返回下标的值,并设置成新的值
* @throws
* @date 2020/6/16 23:46
*/
@Test
public void testGetAndSet(){
int[] intArr={1,2,3};
AtomicIntegerArray testObj=new AtomicIntegerArray(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(){
int[] intArr={1,2,3};
AtomicIntegerArray testObj=new AtomicIntegerArray(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(){
int[] intArr={1,2,3};
AtomicIntegerArray testObj=new AtomicIntegerArray(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(){
int[] intArr={1,2,3};
AtomicIntegerArray testObj=new AtomicIntegerArray(intArr);
System.out.println(testObj.getAndIncrement(2));
System.out.println(testObj.get(2));
}
/**
* 返回下标的值,并将值减一
* @throws
* @date 2020/6/16 23:46
*/
@Test
public void testGetAndDecrement(){
int[] intArr={1,2,3};
AtomicIntegerArray testObj=new AtomicIntegerArray(intArr);
System.out.println(testObj.getAndDecrement(2));
System.out.println(testObj.get(2));
}
/**
* 返回下标的值,并将值加一
* @throws
* @date 2020/6/16 23:46
*/
@Test
public void testGetAndAdd(){
int[] intArr={1,2,3};
AtomicIntegerArray testObj=new AtomicIntegerArray(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(){
int[] intArr={1,2,3};
AtomicIntegerArray testObj=new AtomicIntegerArray(intArr);
System.out.println(testObj.incrementAndGet(2));
System.out.println(testObj.get(2));
}
/**
* 将值减一,并返回下标的值
* @throws
* @date 2020/6/16 23:46
*/
@Test
public void testDecrementAndGet(){
int[] intArr={1,2,3};
AtomicIntegerArray testObj=new AtomicIntegerArray(intArr);
System.out.println(testObj.decrementAndGet(2));
System.out.println(testObj.get(2));
}
/**
* 将值加一,并返回下标的值
* @throws
* @date 2020/6/16 23:46
*/
@Test
public void testAddAndGet(){
int[] intArr={1,2,3};
AtomicIntegerArray testObj=new AtomicIntegerArray(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(){
int[] intArr={1,2,3};
AtomicIntegerArray testObj=new AtomicIntegerArray(intArr);
IntUnaryOperator operator=new IntUnaryOperator() {
@Override
public int applyAsInt(int 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(){
int[] intArr={1,2,3};
AtomicIntegerArray testObj=new AtomicIntegerArray(intArr);
IntUnaryOperator operator=new IntUnaryOperator() {
@Override
public int applyAsInt(int 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(){
int[] intArr={1,2,3};
AtomicIntegerArray testObj=new AtomicIntegerArray(intArr);
IntBinaryOperator operator=new IntBinaryOperator() {
@Override
public int applyAsInt(int left, int 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(){
int[] intArr={1,2,3};
AtomicIntegerArray testObj=new AtomicIntegerArray(intArr);
IntBinaryOperator operator=new IntBinaryOperator() {
@Override
public int applyAsInt(int left, int 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(){
int[] intArr={1,2,3};
AtomicIntegerArray testObj=new AtomicIntegerArray(intArr);
System.out.println(testObj.toString());
}
}