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準備完成 火箭發射
解析:模擬火箭發射,必須等三個線程跑完才能執行主線程;線程