一個線程(或者多個),等待另外N個線程完成某個事情之後才能執行。是併發包中提供的一個可用於控制多個線程同時開始某個動作的類,其採用的方法爲減少計數的方式,當計數減至零時位於latch.Await()後的代碼纔會被執行,CountDownLatch是減計數方式,計數==0時釋放所有等待的線程;
1. 假設兩個線程必須先執行,線程三必須等兩個線程結束之後再繼續
public class MainCountDownLatch {
// QueryAdListTask * 2
private CountDownLatch countDownLatch = new CountDownLatch(2);
//內部類,在裝載該內部類時纔會去創建單例對象
private static class SingletonHolder{
public static MainCountDownLatch instance = new MainCountDownLatch();
}
private MainCountDownLatch(){}
public static MainCountDownLatch getInstance(){
return SingletonHolder.instance;
}
public CountDownLatch getCountDownLatch(){
return countDownLatch;
}
/**
* 計時器使用結束後重置
*/
public void updateCountDownLatch(){
countDownLatch = new CountDownLatch(2);
}
}
2. 兩個接口調用結束,調用countDown使得計數-1
MainCountDownLatch.getInstance().getCountDownLatch().countDown();
3. 需要被暫時阻塞的線程三
MainCountDownLatch.getInstance().getCountDownLatch().await();
doSomething();