CountDownLatch是一个同步工具类,用来协调多个线程之间的同步。
CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成一些任务,然后在CountDownLatch上等待的线程就可以恢复执行接下来的任务。
举个例子来说明CountDownLatch的使用:
百米赛跑,10名运动员选手到达场地等待裁判口令,裁判一声口令,选手听到后同时起跑,当所有选手到达终点,裁判进行汇总排名。
public class CountDownLatchTest {
public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
final CountDownLatch cdOrder = new CountDownLatch(1);
final CountDownLatch cdAnswer = new CountDownLatch(10);
for(int i=0; i<10; i++){
Runnable runnable = new Runnable() {
@Override
public void run() {
try{
System.out.println("选手" + Thread.currentThread().getName() + "正在等待裁判发布口令