blue的博客

CountDownLatch是一个非常实用的多线程控制工具类. 通常用来控制线程等待, 可以让某一个线程等待知道倒计时结束, 再执行.

CountDownLatch的构造函数接受一个整数作为参数, 即当前这个计数器的计数个数.

1
public (int count);

简单示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class CountDownLacthDemo implements Runnable {

static final CountDownLatch end = new CountDownLatch(10);
static final CountDownLacthDemo demo = new CountDownLacthDemo();


public void run() {
try {
Thread.sleep(new Random().nextInt(10) * 1000);
System.out.println("check complete");
// 通知CountDownLatch, 一个线程已经完成工作. 倒计时器可以减1了
end.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

public static void main(String[] args) throws InterruptedException {
ExecutorService executorService = Executors.newFixedThreadPool(10);
for (int i=0; i<10; i++) {
executorService.submit(demo);
}
// 要求主线程等待10个任务全部完成后, 主线程才能继续执行
end.await();
System.out.println("Fire!");
executorService.shutdown();
}
}