作用
等待其他线程执行完后,在执行某个线程。类似之前的 join,但是比 join 更强大。join 只能是一个线程等待另外一个线程执行完才执行,而 CountDownLatch 可以等待多个线程执行完才执行。
主要方法
- countDown,计数器减 1。这个方法可以一个线程执行一次,也可以一个线程执行多次。
- await,堵塞,等计数减为 0 的时候,才继续执行。
示例
public class CountDownLatchDemo {static CountDownLatch countDownLatch = new CountDownLatch(2);
static class Thread1 implements Runnable {
@Override
public void run() {countDownLatch.countDown();
System.out.println(Thread.currentThread().getName() + ":" + 1);
try {Thread.sleep(2000);
} catch (InterruptedException e) {e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":" + 2);
countDownLatch.countDown();}
}
public static void main(String[] args) {Thread thread =new Thread(new Thread1(),"thread");
thread.start();
try {countDownLatch.await();
} catch (InterruptedException e) {e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":" + 3);
}
}
执行结果如下:
虽然线程 thread 休眠了 2 秒,但是 main 依然等到线程 thread 输出 2 后,才输出 3。