CountDownLatch容許一個或多個線程等待其餘線程完成操做。java
package com.test; import java.util.concurrent.CountDownLatch; public class CountDownLatchTest { static CountDownLatch c = new CountDownLatch(2); public static void main(String[] args) throws InterruptedException { new Thread(new Runnable() { @Override public void run() { System.out.println(1); c.countDown(); System.out.println(2); c.countDown(); } }).start(); c.await(); System.out.println(3); } }
CountDownLatch的構造函數接收一個int類型的參數做爲計數器,若是你想等待N個點完成,這裏就傳入N。ide
當咱們調用CountDownLatch的countDown方法時。N就是減1,CountDownLatch的await方法會阻塞當前線程,直到N變成零。因爲coundDown方法能夠用在任何地方。因此這裏說的N個點,能夠是N個線程,能夠是1個線程裏的N個執行步驟。用在多個線程時,只須要把這個CoundDownLatch的引用傳遞到線程裏便可。函數
注意:計數器必須大於等於0,只是等於0的時候,計數器就是0,調用await方法時不會阻塞當前線程。CountDownLatch不可能從新初始化或者修改對象的內部計數器的值.spa