是否有類似於線程的join()方法已通過ThreadPoolExecutor執行?java-Thread.join()ThreadPoolExecutor
如果我將一些可調參數提交給執行者,並使用他們返回的未來的get()方法,我會得到與Thread.join()類似的行爲嗎?
是否有類似於線程的join()方法已通過ThreadPoolExecutor執行?java-Thread.join()ThreadPoolExecutor
如果我將一些可調參數提交給執行者,並使用他們返回的未來的get()方法,我會得到與Thread.join()類似的行爲嗎?
它們是相似的,它們在Thread#join()
和Future#get()
都會阻塞,直到線程/可克隆完成。在Thread#join()
的情況下,調用在線程死亡時返回。沒有結果返回。在Future#get()
的情況下,它將在可調用完成其任務時返回,但執行線程不會死亡(它通常是線程池的一部分,因此它將使自己回到池中)。
如果您提交的ExecuterService這些任務都是關鍵,這是很好的做法,關閉掛鉤添加到您的應用程序調用threadPool.shutdown()
允許所有正在運行的線程的曼妙完成,並等待threadPool.isTerminated()
成爲爲true,或等待threadPool.awaitTermination(max time before force shutdown)
返回。
如果通過「類似」,你的意思是你的當前線程會阻塞,直到工作完成,然後是的。不同之處在於Thread.join()阻塞,直到有問題的線程死亡。 Future.get()只會阻塞,直到submitted完成執行的Callable或Runnable。