下面請看乙個應用場景:
有1個driver和5個worker,需要滿足以下兩點要求:
當driver完成了全部的工作之後才允許worker們開始工作;
當所有的worker都完成了自己的工作之後,driver主線程才能結束。
public class driversystem.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...