/**
 * 模拟铁人三项
 */
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();
    }
}