今天时间学习Phaser api,该类是JUC原子包中的类,通过单元测试代码把所有public api方法跑了一遍,大致了解了底层实现,初学乍练,有很多一知半解的地方,待后续有了深入理解再来补充
package test.java.util.concurrent;
import java.util.concurrent.Phaser;
import java.util.concurrent.TimeUnit;
import org.junit.Test;
/**
* Phaser的测试类
*
* @date 2020-07-26 23:25:11
*/
public class PhaserTest {
/**
*无参构造函数
* @Param
*/
@Test
public void testConstruct0()throws Exception{
Phaser testObj=new Phaser();
System.out.println(testObj.toString());
}
/**
*初始化参与者数量
* @Param
*/
@Test
public void testConstruct1()throws Exception{
Phaser testObj=new Phaser(3);
System.out.println(testObj.toString());
}
/**
* 通过指定phaser初始化
* @Param
*/
@Test
public void testConstruct2()throws Exception{
Phaser testObj=new Phaser(new Phaser());
System.out.println(testObj.toString());
}
/**
*通过指定phaser和参与者数量初始化
* @Param
*/
@Test
public void testConstruct3()throws Exception{
Phaser testObj=new Phaser(new Phaser(),3);
System.out.println(testObj.toString());
}
/**
* 注册同步者
* @Param
*/
@Test
public void testRegister()throws Exception{
Phaser testObj=new Phaser();
System.out.println(testObj.register());
}
/**
* 注册同步者,抛异常
* @Param
*/
@Test
public void testBulkRegister()throws Exception{
Phaser testObj=new Phaser();
System.out.println(testObj.bulkRegister(1));
}
/**
* 到达,类似countDown
* @Param
*/
@Test
public void testArrive()throws Exception{
Phaser testObj=new Phaser();
System.out.println(testObj.arrive());
}
/**
* countDOwn并且取消注册
* @Param
*/
@Test
public void testArriveAndDeregister()throws Exception{
Phaser testObj=new Phaser();
System.out.println(testObj.arriveAndDeregister());
}
/**
* countDown并且阻塞直到其他都到达
* @Param
*/
@Test
public void testArriveAndAwaitAdvance()throws Exception{
Phaser testObj=new Phaser();
System.out.println(testObj.arriveAndAwaitAdvance());
}
/**
*阻塞直到其他都到达
* @Param
*/
@Test
public void testAwaitAdvance()throws Exception{
Phaser testObj=new Phaser();
System.out.println(testObj.awaitAdvance(1));
}
/**
*阻塞方法,同awaitAdvance,只是支持interrupted响应,即waiter线程如果被外部中断,则此方法立即返回,并抛出InterrutedException
* @Param
*/
@Test
public void testAwaitAdvanceInterruptibly1()throws Exception{
Phaser testObj=new Phaser();
System.out.println(testObj.awaitAdvanceInterruptibly(2));
}
/**
*阻塞方法,同awaitAdvance,支持timeout类型的interrupted响应,即当前线程阻塞等待约定的时长,超时后以TimeoutException异常方式返回
* @Param
*/
@Test
public void testAwaitAdvanceInterruptibly()throws Exception{
Phaser testObj=new Phaser();
System.out.println(testObj.awaitAdvanceInterruptibly(2,1, TimeUnit.SECONDS));
}
/**
*强制终止,此后Phaser对象将不可用,即register等将不再有效。此方法将会导致Queue中所有的waiter线程被唤醒
* @Param
*/
@Test
public void testForceTermination()throws Exception{
Phaser testObj=new Phaser();
testObj.forceTermination();;
}
/**
*获取当前phase周期数。如果Phaser已经中断,则返回负值。
* @Param
*/
@Test
public void testGetPhase()throws Exception{
Phaser testObj=new Phaser();
System.out.println(testObj.getPhase());
}
/**
* 获取注册的同步者数量
* @Param
*/
@Test
public void testGetRegisteredParties()throws Exception{
Phaser testObj=new Phaser();
System.out.println(testObj.getRegisteredParties());
}
/**
*获取已经到达的parties个数。
* @Param
*/
@Test
public void testGetArrivedParties()throws Exception{
Phaser testObj=new Phaser();
System.out.println(testObj.getArrivedParties());
}
/**
*获取尚未到达的parties个数。
* @Param
*/
@Test
public void testGetUnarrivedParties()throws Exception{
Phaser testObj=new Phaser();
System.out.println(testObj.getUnarrivedParties());
}
/**
* 获取父级Phaser
* @Param
*/
@Test
public void testGetParent()throws Exception{
Phaser testObj=new Phaser();
System.out.println(testObj.getParent());
}
/**
* 获取根root
* @Param
*/
@Test
public void testGetRoot()throws Exception{
Phaser testObj=new Phaser();
System.out.println(testObj.getRoot());
}
/**
* 是否中断
* @Param
*/
@Test
public void testIsTerminated()throws Exception{
Phaser testObj=new Phaser();
System.out.println(testObj.isTerminated());
}
/**
*ToString
* @Param
*/
@Test
public void testToString()throws Exception{
Phaser testObj=new Phaser();
System.out.println(testObj.toString());
}
}