1. 简介
CountDownLatch这个类能够使一个线程等待其他线程完成各自的工作后再执行。
应用场景:多线程导入一个Excel文件,希望有一个同步线程一直等待这些线程执行完成,最终再将这些导入结果汇总同步至缓存或者数据库中。
2. 示例
public static void main(String[] args) {
CountDownLatch countDownLatch = new CountDownLatch(3);
Thread t1 = new Thread(() -> {
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("[t1线程] 执行完成,耗时2s");
countDownLatch.countDown();
});
Thread t2 = new Thread(() -> {
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("[t2线程] 执行完成,耗时3s");
countDownLatch.countDown();
});
Thread t3 = new Thread(() -> {
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("[t3线程] 执行完成,耗时5s");
countDownLatch.countDown();
});
// 同步线程
Thread sync = new Thread(() -> {
try {
// 开始等待所有线程执行完成
countDownLatch.await();
// 所有线程执行完毕,开始将导入结果汇总同步到数据库
System.out.println("[同步线程] 所有线程执行完毕,开始将导入结果汇总同步到数据库。。。。。。");
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
});
sync.start();
t1.start();
t2.start();
t3.start();
}

评论区