使用CountDownLatch等待多執行緒

2021-08-30 08:25:48 字數 871 閱讀 4744

前言 

countdownlatch 允許乙個或多個執行緒等待其他執行緒完成操作。 

應用場景 

假如有乙個列表的大量資料等待處理,最後全部處理完畢後返回處理結果。普通做法就是從頭遍歷,乙個個順序執行,這樣單執行緒處理效率不高,我們希望使用多執行緒的方式處理,同時在主線程等待所有子執行緒處理完成。

countdownlatch的建構函式接收乙個int型別的引數作為計數器,如果你想等待n個點完成,這裡就傳入n。 

當我們呼叫一次countdownlatch的countdown方法時,n就會減1,countdownlatch的await會阻塞當前執行緒,直到n變成零。由於countdown方法可以用在任何地方,所以這裡說的n個點,可以是n個執行緒,也可以是1個執行緒裡的n個執行步驟。用在多個執行緒時,你只需要把這個countdownlatch的引用傳遞到執行緒裡。

示例**

public static void main(string args)

//執行緒最後執行countdown

countdownlatch.countdown();

});}

trycatch(exception e)

system.out.println(count.tostring());

}

最後的執行結果就是10*10000=100000,可見所有執行緒都處理完了。

擴充套件 countdownlatch的await方法還支援超時時間的設定,當等待超時時間子執行緒還沒執行完將不再等待繼續執行主線程。

public boolean await(long timeout, timeunit unit)

1熟練使用多執行緒處理,可以再處理大量重複性工作時發揮多執行緒處理的效率優勢。

java 多執行緒 CountDownLatch用法

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

java多執行緒CountDownLatch用法

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

執行緒同步工具之CountDownLatch

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