countdownlatch的中文翻譯為"閉鎖",讓一些執行緒堵塞直到另一些執行緒完成一系列操作後才被喚醒;countdownlatch主要有兩個方法,當乙個或者多個執行緒呼叫await方法時,呼叫執行緒會被堵塞。其他執行緒呼叫countdown方法會將計數器減1(呼叫countdown方法的執行緒不會堵塞),當計數器的值變成零時,因呼叫await方法被堵塞的執行緒會喚醒,繼續執行。
其中await(long timeout, timeunit unit) 方法使當前執行緒等待直到閉鎖計數器為0,除非執行緒遇到執行緒中斷異常中斷,或者超出指定的等待時間。
我們可以簡單的看下下面的例子:
public
class
testcountdownlatch
,"執行緒1").
start()
;new
thread((
)->
catch
(interruptedexception e)
testprint.
printb()
; countdownlatchb.
countdown()
;},"執行緒2").
start()
;new
thread((
)->
catch
(interruptedexception e)
testprint.
printc()
; countdownlatchc.
countdown()
;},"執行緒3").
start()
;}}class
testprint
public
void
printb()
public
void
printc()
}
執行結果:
執行緒1
---a
執行緒2--
-b執行緒3
---c
使用countdownlatch我們實現三個執行緒按照順序列印abc,執行緒2需要等待執行緒1執行完對應的操作才執行,而執行緒3則等待執行緒2完成對應的操作才執行。
countdownlatch是一次性的,計數器的值只能在構造方法中初始化一次,之後沒有任何機制再次對其設定值,當countdownlatch使用完畢後,它不能再次被使用。
多執行緒 CountDownLatch
countdownlatch 允許乙個或多個執行緒等待其他執行緒完成操作。應用場景 假如有這樣乙個需求,當我們需要解析乙個excel裡多個sheet的資料時,可以考慮使用多執行緒,每個執行緒解析乙個sheet裡的資料,等到所有的sheet都解析完之後,程式需要提示解析完成。在這個需求中,要實現主線程...
執行緒同步 CountDownLatch
應用場景 有乙個任務想要往下執行,但必須要等到其他的任務執行完畢後才可以繼續往下執行。假如我們這個想要繼續往下執行的任務呼叫乙個countdownlatch物件的await 方法,其他的任務執行完自己的任務後呼叫同乙個countdownlatch物件上的countdown 方法,這個呼叫await ...
CountDownLatch 併發測試
countdownlatch,乙個同步輔助類,在完成一組正在其他執行緒中執行的操作之前,它允許乙個或多個執行緒一直等待。主要方法 public countdownlatch int count public voidcountdown public voidawait throws interrup...