countdownlatch 允許乙個或多個執行緒等待其他執行緒完成操作。
應用場景
假如有這樣乙個需求,當我們需要解析乙個excel裡多個sheet的資料時,可以考慮使用多執行緒,每個執行緒解析乙個sheet裡的資料,等到所有的sheet都解析完之後,程式需要提示解析完成。在這個需求中,要實現主線程等待所有執行緒完成sheet的解析操作,最簡單的做法是使用join。**如下:
01
public
class
joincountdownlatchtest
08
});
09
10
thread parser2 =
new
thread(
new
runnable()
15
});
16
17
parser1.start();
18
parser2.start();
19
parser1.join();
20
parser2.join();
21
system.out.println(
"all parser finish"
);
22
}
23
24
}
join用於讓當前執行執行緒等待join執行緒執行結束。其實現原理是不停檢查join執行緒是否存活,如果join執行緒存活則讓當前執行緒永遠wait,**片段如下,wait(0)表示永遠等待下去。
1
while
(isalive())
而在jdk1.5之後的並發包中提供的countdownlatch也可以實現join的這個功能,並且比join的功能更多。
01
public
class
countdownlatchtest
14
}).start();
15
16
c.await();
17
system.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...
多執行緒 多執行緒原理
我們首先要知道什麼是多執行緒,說白了就是多個執行緒,執行緒是什麼呢,其實就是程序執行的途徑,那麼說道這裡我們又引入了乙個新的名字,就是程序,那麼我們來看看什麼是程序,其實我們自己也能看到,啟動電腦的任務管理器,我們就可以看到程序選項,裡面是我們電腦所有的程序,我們會發現有很多的程序.簡單地說就是程序...