執行緒同步工具之CountDownLatch

2021-09-02 13:54:46 字數 889 閱讀 2881

countdownlatch的乙個非常典型的應用場景是:有乙個任務想要往下執行,但必須要等到其他的任務執行完畢後才可以繼續往下執行。假如我們這個想要繼續往下執行的任務呼叫乙個countdownlatch物件的await()方法,其他的任務執行完自己的任務後呼叫同乙個countdownlatch物件上的countdown()方法,這個呼叫await()方法的任務將一直阻塞等待,直到這個countdownlatch物件的計數值減到0為止。

countdownlatch類有3個基本元素:

初始值決定countdownlatch類需要等待的事件的數量。

await() 方法, 被等待全部事件終結的執行緒呼叫。

countdown() 方法,事件在結束執行後呼叫。

當建立 countdownlatch 物件時,物件使用建構函式的引數來初始化內部計數器。每次呼叫 countdown() 方法, countdownlatch 物件內部計數器減一。當內部計數器達到0時, countdownlatch 物件喚醒全部使用 await() 方法睡眠的執行緒們。

不可能重新初始化或者修改countdownlatch物件的內部計數器的值。一旦計數器的值初始後,唯一可以修改它的方法就是之前用的 countdown() 方法。當計數器到達0時, 全部呼叫 await() 方法會立刻返回,接下來任何countdown() 方法的呼叫都將不會造成任何影響。

此方法與其他同步方法有這些不同:

countdownlatch 機制不是用來保護共享資源或者臨界區。它是用來同步乙個或者多個執行多個任務的執行緒。它只能使用一次。像之前解說的,一旦countdownlatch的計數器到達0,任何對它的方法的呼叫都是無效的。如果你想再次同步,你必須建立新的物件。

countdownlatch 類有另一種版本的 await() 方法,它是:

***

執行緒同步工具之CountDownLatch

countdownlatch的乙個非常典型的應用場景是 有乙個任務想要往下執行,但必須要等到其他的任務執行完畢後才可以繼續往下執行。假如我們這個想要繼續往下執行的任務呼叫乙個countdownlatch物件的await 方法,其他的任務執行完自己的任務後呼叫同乙個countdownlatch物件上的...

執行緒同步工具Condition詳解

condition可以代替object監視器方法 wait notify和notifyall 必須和lock配合使用,lock替換synchronized方法和語句的使用,condition取代了物件監視器方法的使用。可以使某個執行緒掛起,直到其他執行緒喚醒,就像object.wait 方法,乙個c...

多執行緒同步工具 LockSupport

用例1 子執行緒等待主線程發放許可!public static void main string args thread.start system.out.println 主線程 休眠1秒!try catch interruptedexception e system.out.println 主線程...