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();
}
}
本文通过一个医院场景的模拟,展示了Java并发工具类CountDownLatch的具体应用。通过创建医生和患者两个角色,利用CountDownLatch来同步线程,确保所有患者在医生就绪后才能开始体检流程,最后医生完成所有患者的检查后下班。此例详细解释了CountDownLatch的await()和countDown()方法的使用。
1638

被折叠的 条评论
为什么被折叠?



