Phaser铁人三项

/**
 * 模拟铁人三项
 */
public class PhaserTest {

    private static Random random = new Random(System.currentTimeMillis());

    public static void main(String[] args) {

        Phaser phaser = new Phaser(5);
        for (int i = 1; i < 5; i++) {
            new Sportsman(i, phaser).start();
        }
        new InjuredSportsman(5, phaser).start();


    }

    static class InjuredSportsman extends Thread {

        private int no;
        private Phaser phaser;

        InjuredSportsman(int no, Phaser phaser) {
            this.no = no;
            this.phaser = phaser;
        }


        @Override
        public void run() {
            try {
                sport(no, phaser, " starts   running ", " ends   running ");
                sport(no, phaser, " starts   bicycle ", " ends   bicycle");
                System.out.println("I'm injured ,  i will be exit");
                phaser.arriveAndDeregister();

            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
    }

    static class Sportsman extends Thread {

        private int no;
        private Phaser phaser;

        Sportsman(int no, Phaser phaser) {
            this.no = no;
            this.phaser = phaser;
        }


        @Override
        public void run() {
            try {
                sport(no, phaser, " starts   running ", " ends   running ");
                sport(no, phaser, " starts   bicycle ", " ends   bicycle");
                sport(no, phaser, " starts   long jump  ", " ends   long jump ");

            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
    }

    private static void sport(int no, Phaser phaser, String s, String s2) throws InterruptedException {
        System.out.println(no + s);
        Thread.sleep(random.nextInt(5000));
        System.out.println(no + s2);
        phaser.arriveAndAwaitAdvance();
    }
}

猜你喜欢

转载自www.cnblogs.com/moris5013/p/11898956.html