1. 程式人生 > >執行緒十五:CountDownLatch

執行緒十五:CountDownLatch

CountDownLatch是jdk1.5之後引入的一個同步器應用類,它的作用能夠使一個執行緒一直等待直到其他執行緒完成任務後再繼續執行。CountDownLatch通常也被叫做門閂,意思是它會導致一條或多條執行緒一直在門口等待,直到一條執行緒開啟這個門,其他執行緒才得以繼續執行。

我們可以通過構造器CountDownLatch(int count)來構造一個CountDownLatch的例項,其中count代表著計數個數,當這個計數個數變成0時,執行緒就可以繼續執行了。如果在構造器呼叫的時候,為count賦值為負數,那麼系統會丟擲IllegalArgumentException異常。

CountDownLatch提供了以下幾個方法來完成具體的操作:1.await方法會強制呼叫執行緒一直等到計數個數為0,如果被中斷會丟擲InterruptedException異常。2.await(long timeout,TimeUnit unit)方法會在引數指定的時間內一直強制呼叫執行緒等待,直到計數個數為0,如果被中斷會丟擲InterruptedException異常。3.countDown方法的作用是遞減計數個數,當計數個數為0時,系統釋放所有等待執行緒。4.getCount方法會返回當前的計數個數,通常用於測試和除錯程式。

為了描述CountDownLatch的應用,我們看一個例項:

例子中建立了三個執行緒,為了演示的需要,我在每個執行緒的run方法中呼叫了sleep方法,當三個任務都執行完畢並有效呼叫了countDown方法之後,系統的主執行緒得以繼續執行。

CountDownLatch通常用在以下場景:1.當需要多個執行緒同時執行併發任務,實現最大程度的併發時可以使用CountDownLatch。2.當在某個執行緒執行之前需要多個執行緒完成各自任務的情況下。

參考連結