CountDownLatch是一个计数器闭锁,让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒。
CountDownLatch主要有两个方法,当一个或多个线程调动await方法时,调用线程会被阻塞。其他线程调用countDown方法会将计数器减1,注意此处调用countDown方法的线程不会阻塞,当计数器的值变为0时,因调用await方法被阻塞的线程会被唤醒,继续执行。
代码示例
public static void main(String[] args) throws Exception {
CountDownLatch countDownLatch = new CountDownLatch(6);
for (int i = 0; i < 6; i++) {
new Thread(() -> {
System.out.println(Thread.currentThread().getName() + " 同学离开教室");
countDownLatch.countDown();
}).start();
}
countDownLatch.await();
System.out.println(Thread.currentThread().getName() + " 老师关教室门");
}
执行结果
Thread-1 同学离开教室
Thread-5 同学离开教室
Thread-2 同学离开教室
Thread-0 同学离开教室
Thread-4 同学离开教室
Thread-3 同学离开教室
main 老师关教室门