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();
}
}
}
}