多執行緒之CountDownLatch

2022-03-18 15:02:18 字數 1133 閱讀 2796

下面請看乙個應用場景:

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

當driver完成了全部的工作之後才允許worker們開始工作;

當所有的worker都完成了自己的工作之後,driver主線程才能結束。

public class driver 

system.out.println("driver is doing something...");

system.out.println("driver is finished, start all workers ...");

startsignal.countdown(); // driver執行完畢,發出開始訊號,使所有的worker執行緒開始執行

donesignal.await(); // 等待所有的worker執行緒執行結束

system.out.println("finished.");

}}class worker implements runnable

public void run() catch (interruptedexception e)

}}執行結果:

driver is doing something...

driver is finished, start all workers ...

working now ...

working now ...

working now ...

working now ...

working now ...

finished.

此處修改countdownlatch個數為乙個**如下:public class driver

latch.await();

system.out.println("結束"); }

static class worker implements runnable

public void run() }}

結果為:t4開始幹活 workid是14

t1開始幹活 workid是11

t2開始幹活 workid是12

t3開始幹活 workid是13

t0開始幹活 workid是10

結束

多執行緒條件通行工具 CountDownLatch

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

java併發程式設計之CountDownLatch

countdownlatch 主要是作用是用來維護乙個執行緒控制多個執行緒,內部是通過乙個計數器實現的,當我們建立乙個countdownlatch物件的時候,就需要指定乙個數值,這個數值就表示了執行緒的數量,每當乙個執行緒任務執行完畢,計數器就會減 1,當計數器的值變為0時,就表示所有的執行緒都已經...

多執行緒之執行緒同步

pulse lockobj 表示釋放當前被lock的lockobj,容許其他執行緒呼叫。相當於暫時掛起當前執行緒 wait lockobj 表示等待當前被其他執行緒占用的lockobj。下面的 將會交替執行兩個執行緒 class ticktock console.write tick monitor...