多執行緒《二》CountDownLatch的用法

2021-09-08 05:19:34 字數 2503 閱讀 2727

countdownlatch是乙個同步的輔助類,它可以允許乙個或多個執行緒等待,直到一組在其它執行緒中的操作執行完成。

乙個countdownlatch會通過乙個給定的count數來被初始化。其中await()方法會一直阻塞,直到當前的count被減到0,而這個過程是通過呼叫countdown()方法來實現的。在await()方法不再阻塞以後,所有等待的執行緒都會被釋放,並且任何await()的子呼叫都會立刻返回。這是一次性的--count不能被重置。如果你需要一種能重置count的版本,請考慮使用cyclicbarrier

countdownlatch是乙個多功能的同步工具,可以被用於各種目的。乙個countdownlatch通過乙個值為1的count被初始化,來作為乙個開/關的門或門閂:所有呼叫了await()的執行緒都會在門前等待,直到門被乙個執行緒通過呼叫countdown()開啟。乙個被初始化為n的countdownlatch可以被用來「在n個執行緒都完成了某種操作(或者一些操作已經被完成了n次)之後建立乙個執行緒」。

countdownlatch乙個有用的屬性就是它不需要執行緒們在繼續執行之前,呼叫countdown來等待count被減到0。它簡單地阻止了任何呼叫了await()的執行緒繼續,直到所有的執行緒都能

下面請看乙個應用場景:

有1個driver和5個worker,需要滿足以下兩點要求:

1

public

class

driver

1011 system.out.println("

driver is doing something...");

12 system.out.println("

driver is finished, start all workers ...");

13 startsignal.countdown(); //

driver執行完畢,發出開始訊號,使所有的worker執行緒開始執行

14 donesignal.await(); //

等待所有的worker執行緒執行結束

15 system.out.println("

finished.");

16}17}

1819

class

worker implements runnable

26public

void

run() catch

(interruptedexception e) 34}

35}36

執行結果:

1 driver is

doing something...

2 driver is

finished, start all workers ...

3working now ...

4working now ...

5working now ...

6working now ...

7working now ...

8 finished.

示例仍然使用開會案例。老闆進入會議室等待5個人全部到達會議室才會開會。所以這裡有兩個執行緒老闆等待開會執行緒、員工到達會議室:

1

public

class

countdownlatchtest catch

(interruptedexception e)

1718 system.out.println("

所有人都已經到齊了,開會吧...");

19}20}

2122

//員工到達會議室

23static

class

empleoyeethread extends thread30}

3132

public

static

void

main(string args)39}

40 }

1

private listget(final listparams

) catch

(busines***ception e) finally25}

26});27}

28try

catch

(interruptedexception e)

33return

result;

34 }

多執行緒條件通行工具 CountDownLatch

countdownlatch的作用是,執行緒進入等待後,需要計數器達到0才能通行。例子1 主線程建立了若干子執行緒,主線程需要等待這若干子執行緒結束後才結束。例子2 執行緒有若干任務,分多個執行緒來完成,需要等待這若干任務被完成後,才繼續執行處理。原始碼 since 1.5 author doug ...

java執行緒同步之CountDownLatch

1 類說明 jdk的concurrent包中的countdownlatch類是乙個執行緒同步的輔助類,它使得執行緒可以一直等待在其它執行緒中執行的操作,直到此操作結束。countdownlatch在初始化的時候指定乙個大小值n,呼叫countdownlatch的await方法的執行緒會陷入等待之中,...

多執行緒系列(二) 多執行緒基礎

目錄 一 執行緒的幾種狀態 屬性 方法 執行緒的5個狀態 1 建立狀態 new 對應 thread th new thread worker 時 就建立了乙個新的執行緒,僅僅是新建狀態,程式還沒有執行執行緒中的 2 就緒狀態 runnable 對應 th.start 方法,新建執行緒在接收到star...