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...