執行緒 六 CountDownLatch

2021-10-23 15:06:14 字數 1157 閱讀 7476

概念:countdownlatch能夠使乙個執行緒在等待另外一些執行緒完成各自工作之後,再繼續執行。使用乙個計數器進行實現。計數器初始值為執行緒的數量。當每乙個執行緒完成自己任務後,計數器的值就會減一。當計數器的值為0時,表示所有的執行緒都已經完成一些任務,然後在countdownlatch上等待的執行緒就可以恢復執行接下來的任務。

主要方法:

1.public void await() throws interruptedexception ;

呼叫await()方法的執行緒會被掛起,它會等待直到count值為0才繼續執行。

2.public boolean await(long timeout, timeunit unit) throws interruptedexception ;

和await()類似,只不過等待一定的時間後count值還沒變為0的話就會繼續執行。

3.public void countdown() ;

將count值減1。

場景一:

乙個執行緒需要等待其它執行緒執行完才執行。

public class countdownlatchtest 

// 關閉執行緒池

executorservice.shutdown();

}static class task1 implements runnable

@override

public void run() catch (interruptedexception e) }}

static class task2 implements runnable

@override

public void run() catch (interruptedexception e) }}

static void maintask()

}

執行結果如下:

可以看出pool-1-thread-1這個執行緒一直等到其它執行緒都執行完了才執行maintask()方法列印111111。

開發過程中會經常遇到這種情況,我先要返回乙個結果,但是返回的結果資訊需要從不同的表中查詢或者呼叫不同的服務獲取後再拼裝才能得到,這中情況是場景一在開發中最常見的了。

java多執行緒之CountDownLatch

countdownlatch是乙個同步工具類,用來協調多個執行緒之 間的同步。其能夠使 乙個執行緒在等待另外一些執行緒完成各自工作之後,再繼續執行。使用乙個計數器進行實現。計數器初始值為執行緒的數量。當每乙個執行緒完成自己任務後,計數器的值就會減一。當計數器的值為0時,表示所有的執行緒都已經完成了任...

多執行緒之倒計時器CountDownLatch及原理

這個工具通常用來控制線程等待,它可以讓某乙個執行緒等待直到倒計時結束再開始執行。countdownlatch是 共享模式 的。構造方法 countdownlatch int count count就是計數的次數 主要方法 void await 讓當前執行緒等待,直到倒計時結束 long getcou...

自己動手簡單實現CountDownLatch

在使用執行緒池的過程中,如何判斷所有提交的任務都已經執行完畢了呢?使用jdk自帶的countdownlatch,可以輕鬆實現這一需求 public class countdownlatchtest catch interruptedexception e executorservice.shutdo...