100個運動員,5個5個跑

public class Test {
    private static Executor executor = Executors.newCachedThreadPool();

    public static void main(String[] args) throws InterruptedException {
        int[] array = new int[100];
        for (int i = 0; i < 100; i++) {
            array[i] = i;
        }

        // 100個運動員,5個5個跑
        // CyclicBarrier CountDownLatch 綜合應用
        CyclicBarrier cyclicBarrier = new CyclicBarrier(5);
        CountDownLatch countDownLatch = new CountDownLatch(5);
        for (int i = 0; i < array.length; ) {
            for (int j = 0; j < 5; j++) {
                executor.execute(new Athlete(countDownLatch, cyclicBarrier, i));
                i++;
            }
            countDownLatch.await();
            countDownLatch = new CountDownLatch(5);
        }
    }

    private static class Athlete implements Runnable {
        private CountDownLatch countDownLatch;
        private CyclicBarrier cyclicBarrier;
        private int no;

        public Athlete(CountDownLatch countDownLatch, CyclicBarrier cyclicBarrier, int no) {
            this.countDownLatch = countDownLatch;
            this.cyclicBarrier = cyclicBarrier;
            this.no = no;
        }

        @Override
        public void run() {
            try {
                System.out.println(no + "號運動員等待");
                cyclicBarrier.await();
                System.out.println(no + "號運動員完成跑步");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                countDownLatch.countDown();
            }
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章