我正在編寫代碼,我需要確保在提交結果之前線程池中沒有線程正在運行(以避免丟失我應該提交的數據)。對於這一點,我使用:我如何知道ThreadPoolExecutor中的線程已完成?
while (_executor.getActiveCount() > 0)
{
try
{
Thread.sleep(10); // milliseconds
}
catch (InterruptedException e)
{
// OK do nothing
}
}
但同事回顧指出,getActiveCount商務部指出:
- 返回正在積極
- 執行的線程的大致數量任務。
那麼,有沒有危險,我會得到了while循環,同時還有在游泳池活動線程?如果是這樣,那麼等待我的所有工作線程完成的正確方法是什麼?
編輯:給更多的上下文:這是一個在線系統,其中包含執行程序服務的任務保持無限期運行。工作通過消息傳遞系統進入,放在執行程序中的一個線程中,不需要任何同步,工作就會進入消息傳遞系統的另一個隊列。我不想殺死執行者等待完成任務。
你能等待的任務的執行,而不是等待執行是沒有工作? http://stackoverflow.com/questions/12896755/executorservice-with-invokeall-and-future-in-java – zapl