CountDownLatch筆記

CountDownLatch容許一個或多個線程一直等待,直到其餘線程的操做執行完後再執行;CountDownLatch是經過一個計數器來實現的,計數器的初始值爲線程的數量。每當一個線程完成了本身的任務後,計數器的值就會減1。當計數器值到達0時,它表示全部的線程已經完成了任務,而後在閉鎖上等待的線程就能夠恢復執行任務。ide

public class CountDownLatchDemo {
    static CountDownLatch countDownLatch=new CountDownLatch(3);
    public static class task implements  Runnable{
        @Override
        public void run() {
            try {
                Thread.sleep(1000);//模擬耗時
                System.out.println(Thread.currentThread().getName()+"準備完成");
                countDownLatch.countDown();//表示該任務已完成,計數器減一
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    public static void main(String[] args) {
        ExecutorService executorService= Executors.newFixedThreadPool(3);
        for(int i=0;i<3;i++){
            executorService.submit(new task());
        }
        try {
            countDownLatch.await();//等待子線程都完成才能執行
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("火箭發射");
    }
}
執行結果以下
pool-1-thread-3準備完成
pool-1-thread-1準備完成
pool-1-thread-2準備完成
火箭發射

解析:模擬火箭發射,必須等三個線程跑完才能執行主線程;線程

相關文章
相關標籤/搜索