Java 官方計數器 CountdownLatch

一個線程(或者多個),等待另外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();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章