作用
等待其他线程执行完后,在执行某个线程。类似之前的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。