从字面理解 CountDownLatch,意思是倒数门闩。它的作用是多个线程做汇聚。主线程开启了 A、B、C 三个线程做不同的事情,但是主线程需要等待 A、B、C 三个线程全部完成后才能继续后面的步骤。此时就需要 CountDownLatch 出马了。CountDownLatch 会阻塞主线程,直到计数走到 0,门闩才会打开,主线程继续执行。
private static CountDownLatch countDownLatch = new CountDownLatch(3);
public static void main(String[] args) throws InterruptedException {
System.out.println("主线程开始工作");
new Thread(() -> {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程1完成任务");
countDownLatch.countDown();
}).start();
new Thread(() -> {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程2完成任务");
countDownLatch.countDown();
}).start();
new Thread(() -> {
try {
Thread.sleep(150);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程3完成任务");
countDownLatch.countDown();
}).start();
countDownLatch.await();
System.out.println("全部完成任务,主线程继续执行。。。");
}
结果:
主线程开始工作
线程2完成任务
线程1完成任务
线程3完成任务
全部完成任务,主线程继续执行。。。
网友评论