package com.example.sina.thread;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CountDownLatchTest {
public static void main(String[] args) {
// 醫生
CountDownLatch hospitalLatch = new CountDownLatch(1);
// 患者
CountDownLatch patientLatch = new CountDownLatch(10);
System.out.println("患者排隊");
System.out.println("醫生上班");
// 創建一個可緩存的線程池
ExecutorService executorService = Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
final int j = i;
executorService.execute(() -> {
try {
hospitalLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("體檢:" + j);
patientLatch.countDown();
});
}
hospitalLatch.countDown();
try {
patientLatch.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("醫生下班");
executorService.shutdown();
}
}