作用

等待其他线程执行完后,在执行某个线程。类似之前的join,但是比join更强大。join只能是一个线程等待另外一个线程执行完才执行,而CountDownLatch可以等待多个线程执行完才执行。

主要方法

  1. countDown,计数器减1。这个方法可以一个线程执行一次,也可以一个线程执行多次。
  2. 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。