多執行緒 CountDownLatch

2021-07-09 16:46:56 字數 2158 閱讀 3465

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

應用場景

假如有這樣乙個需求,當我們需要解析乙個excel裡多個sheet的資料時,可以考慮使用多執行緒,每個執行緒解析乙個sheet裡的資料,等到所有的sheet都解析完之後,程式需要提示解析完成。在這個需求中,要實現主線程等待所有執行緒完成sheet的解析操作,最簡單的做法是使用join。**如下:

01publicclassjoincountdownlatchtest

08});

09

10thread parser2 =newthread(newrunnable()

15});

16

17parser1.start();

18parser2.start();

19parser1.join();

20parser2.join();

21system.out.println("all parser finish");

22}

23

24}

join用於讓當前執行執行緒等待join執行緒執行結束。其實現原理是不停檢查join執行緒是否存活,如果join執行緒存活則讓當前執行緒永遠wait,**片段如下,wait(0)表示永遠等待下去。

1while(isalive())

而在jdk1.5之後的並發包中提供的countdownlatch也可以實現join的這個功能,並且比join的功能更多。

01publicclasscountdownlatchtest

14}).start();

15

16c.await();

17system.out.println("3");

18}

19

20}

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

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

其他方法

如果有某個解析sheet的執行緒處理的比較慢,我們不可能讓主線程一直等待,所以我們可以使用另外乙個帶指定時間的await方法,await(long time, timeunit unit): 這個方法等待特定時間後,就會不再阻塞當前執行緒。join也有類似的方法。

java多執行緒之CountDownLatch

countdownlatch是乙個同步工具類,用來協調多個執行緒之 間的同步。其能夠使 乙個執行緒在等待另外一些執行緒完成各自工作之後,再繼續執行。使用乙個計數器進行實現。計數器初始值為執行緒的數量。當每乙個執行緒完成自己任務後,計數器的值就會減一。當計數器的值為0時,表示所有的執行緒都已經完成了任...

多執行緒之倒計時器CountDownLatch及原理

這個工具通常用來控制線程等待,它可以讓某乙個執行緒等待直到倒計時結束再開始執行。countdownlatch是 共享模式 的。構造方法 countdownlatch int count count就是計數的次數 主要方法 void await 讓當前執行緒等待,直到倒計時結束 long getcou...

多執行緒 多執行緒原理

我們首先要知道什麼是多執行緒,說白了就是多個執行緒,執行緒是什麼呢,其實就是程序執行的途徑,那麼說道這裡我們又引入了乙個新的名字,就是程序,那麼我們來看看什麼是程序,其實我們自己也能看到,啟動電腦的任務管理器,我們就可以看到程序選項,裡面是我們電腦所有的程序,我們會發現有很多的程序.簡單地說就是程序...