更精确地讲:如果我通过submit(Callable<T> task)
在ExecutorService
(使用自身构造的Executors.newCachedThreadPool()
)上调用方法来启动异步计算,则可以等待计算完成并通过调用检索结果Future.get()
。
我的问题是:如果计算已经完成,在我打电话之前会发生什么get()
?在检索结果之前,线程是否被阻塞?是否存储结果并将线程分配给另一个任务?完全不同吗?
预先感谢您的回答
不,线程没有被阻止,它被返回到池中。通常,get()
调用线程依赖于worker,而不是相反。因此,如果有结果,则将其返回;如果没有,请等到可用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句