2011-07-14 76 views
4

是否有類似於線程的join()方法已通過ThreadPoolExecutor執行?java-Thread.join()ThreadPoolExecutor

如果我將一些可調參數提交給執行者,並使用他們返回的未來的get()方法,我會得到與Thread.join()類似的行爲嗎?

回答

4

它們是相似的,它們在Thread#join()Future#get()都會阻塞,直到線程/可克隆完成。在Thread#join()的情況下,調用在線程死亡時返回。沒有結果返回。在Future#get()的情況下,它將在可調用完成其任務時返回,但執行線程不會死亡(它通常是線程池的一部分,因此它將使自己回到池中)。

如果您提交的ExecuterService這些任務都是關鍵,這是很好的做法,關閉掛鉤添加到您的應用程序調用threadPool.shutdown()允許所有正在運行的線程的曼妙完成,並等待threadPool.isTerminated()成爲爲true,或等待threadPool.awaitTermination(max time before force shutdown)返回。

1

如果通過「類似」,你的意思是你的當前線程會阻塞,直到工作完成,然後是的。不同之處在於Thread.join()阻塞,直到有問題的線程死亡。 Future.get()只會阻塞,直到submitted完成執行的Callable或Runnable。