CountDownLatch初步認識

2021-10-06 15:44:17 字數 1215 閱讀 1231

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