多執行緒併發之CountDownLatch學習筆記

2021-09-29 17:15:42 字數 1190 閱讀 3327

countdownlatch是乙個同步工具類

作用:它允許一或多個執行緒一直等待,等待某些執行緒完成工作以後,這一或多個執行緒再繼續執行。類似乙個加強版的join方法

原理:通過乙個計數器實現,計數器的初始化值大於等於某些執行緒的數量,當某些執行緒中的乙個完成工作後,計數器減一(當然也可以減多個,這個由業務決定,一般來說是減一),直到計數器為0,之前等待的一或多個執行緒繼續執行。

主要涉及方法:await() 讓執行緒等待;countdown() 讓計數器減一

舉例:假設主線程和業務執行緒(即一或多個執行緒)需要等待初始化執行緒(即某些執行緒,假設有4個初始化執行緒)完成初始化工作以後,才能繼續執行

**如下:

public class usecountdownlatch 

}//業務執行緒

private static class workerthread implements runnable catch (interruptedexception e)

system.out.println("workerthread_"+thread.currentthread().getid()

+"業務執行緒,處理自己的業務");}}

public static void main(string args) throws interruptedexception

latch.await();

system.out.println("主線程,處理自己的業務");}}

在主線程中,我們呼叫了乙個業務執行緒和4個初始化執行緒。當主線程和業務執行緒執行到latch.await()後進入等待狀態,初始化執行緒初始化完成後,latch.countdown()使得計數器減一。當計數器為0時,主線程和業務執行緒繼續執行。執行結果如下:

當然,在初始化執行緒中也可以呼叫兩次latch.countdown(),那麼4個初始化執行緒則需要設定計數器的初始值為8。

latch.countdown()執行完後,還可以繼續執行初始化執行緒的其他業務**,不像執行latch.await()後,執行緒進入等待狀態,等待計數器為0時才能繼續執行。所以latch.countdown()可以呼叫多次。

玩轉併發 多執行緒Count Down設計模式

count down設計模式其實也叫做latch 閥門 設計模式。當若干個執行緒併發執行完某個特定的任務,然後等到所有的子任務都執行結束之後再統一彙總。jdk自帶countdownlatch public static void main string args throws interrupted...

多執行緒併發

多執行緒併發主要有3個方面 1 同步器 主要有synchronized,reentrantlock 訊號量,門栓 countdownlatch 障柵 cyclicbarrier 交換器。2 同步容器 主要包括 對映 集 佇列 對映 concurrenthashmap,concurrentskipli...

多執行緒併發

更簡單的執行緒池 多執行緒和多程序都可以很容易的實現併發,協程通過切換上下文來充分利用cpu實現併發效果 threading模組 thread類的基本狀態和行為 屬性名和值 name none,group none,target none,args kwargs daemon none 方法 sta...