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