CountDownLatch深度解析

2021-09-22 18:22:32 字數 1108 閱讀 4221

說明:

countdownlatch可以看成是乙個倒計數器。用給定的計數初始化,計數器的初始值為執行緒的數量,每當乙個執行緒呼叫countdown(),計數器的值就會減1。 await方法用於阻塞當前執行緒,直到計數器為0時才恢復執行,並且任何後續的await 呼叫立即返回。

countdownlatch是一次性的,計數器的值只能在構造方法中初始化一次,之後沒有任何機制再次對其設定值,當countdownlatch使用完畢後,它不能再次被使用。如果您需要重置計數的版本,請考慮使用cyclicbarrier。

示例:

public class countdownlatchtest implements runnable catch (interruptedexception e) 

}public static void main(string args) throws interruptedexception

//導致當前執行緒等到鎖存器計數到零,除非執行緒是 interrupted。

cdl.await();

//獲取當前執行緒並返回當前計數。

system.out.println(thread.currentthread().getname()+ "等待任務執行完畢後的計數器:"+cdl.getcount());

service.shutdown();}}

執行結構如下:

執行流程:

其中t1,t2,t3,t4代表執行緒池中的執行緒,執行緒main代表主線程,紅色部分反映了執行緒執行countdown()後count的值。

使用場景:

1 測試共享資源是否是執行緒安全的。

2 測試**是否存在死鎖的情況。

3 任務彙總:讓多個執行緒分別取執行任務,待子任務執行完畢後再在主線程匯**計。

多執行緒 CountDownLatch

countdownlatch 允許乙個或多個執行緒等待其他執行緒完成操作。應用場景 假如有這樣乙個需求,當我們需要解析乙個excel裡多個sheet的資料時,可以考慮使用多執行緒,每個執行緒解析乙個sheet裡的資料,等到所有的sheet都解析完之後,程式需要提示解析完成。在這個需求中,要實現主線程...

執行緒同步 CountDownLatch

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

CountDownLatch 併發測試

countdownlatch,乙個同步輔助類,在完成一組正在其他執行緒中執行的操作之前,它允許乙個或多個執行緒一直等待。主要方法 public countdownlatch int count public voidcountdown public voidawait throws interrup...