java并发编程学习之CountDownLatch

15次阅读

共计 854 个字符,预计需要花费 3 分钟才能阅读完成。

作用

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

正文完
 0