当前位置: 首页 > 工具软件 > Phaser > 使用案例 >

Phaser api详解

常智勇
2023-12-01

今天时间学习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());
        }
}

 

 类似资料: