CountDownLatch概念
一种同步辅助程序,允许一个或多个线程等待在其它线程中执行的一组操作完成。
使用给定的计数初始化CountDownLatch。由于调用了倒计时方法,await方法将阻塞,直到当前计数达到零,然后释放所有等待线程,并立即返回await的任何后续调用。这是一个一次性现象——计数不能重置。如果需要重置计数的版本,请考虑使用CyclicBarrier。
倒计时锁存器是一种通用的同步工具,可用于多种目的。使用计数1初始化的倒计时锁存器用作简单的开/关锁存器或门:调用倒计时的线程在门处等待,直到它被调用倒计时的线程打开。初始化为N的倒计时锁存器可用于使一个线程等待N个线程完成某个操作或某个操作已完成N次。
倒计时锁存器的一个有用特性是,它不要求调用倒计时的线程在继续之前等待计数达到零,它只是防止任何线程在所有线程都可以通过之前继续通过等待。
应用例子
1)初始化CountDownLatch为N
2)在主线程中提交N个任务,交给子线程执行;子线程执行完成后,调用CountDownLatch.countDown方法
3)在主线程中调用CountDownLatch.await,会阻塞主线程,知道所有子线程执行完毕
class Driver2 {
void main() throws InterruptedException {
CountDownLatch doneSignal = new CountDownLatch(N);
Executor e = ...
for (int i = 0; i < N; ++i) {
// create and start threads
e.