java - ThreadPoolExecutor的Thread.join()

时间:2011-07-14 02:16:30

标签: java multithreading

对于已通过ThreadPoolExecutor执行的线程是否有类似join()的方法?

如果我向执行程序提交一些Callables并在他们返回的Futures上使用get()方法,我是否会获得与Thread.join()类似的行为?

2 个答案:

答案 0 :(得分:4)

它们在{(1}}和Thread#join()都将阻塞直到线程/ cllable完成之前是相似的。在Future#get()的情况下,调用在线程死亡时返回。没有返回结果。在Thread#join()的情况下,它将在可调用执行完任务时返回,但执行的线程不会死(它通常是线程池的一部分,所以它会使自己可以返回池中)。 / p>

如果您提交给ExecuterService的这些任务是关键任务的,那么最好在应用程序中添加一个关闭钩子,调用Future#get()以允许正常完成所有正在运行的线程,并等待threadPool.shutdown()成为真,或等待threadPool.isTerminated()返回。

答案 1 :(得分:1)

如果是“相似”,则表示当前线程将阻塞,直到工作完成,然后是。区别在于Thread.join()会阻塞,直到有问题的线程死掉。 Future.get()仅阻塞你submitted完成执行的Callable或Runnable。