更确切地说:如果我通过在submit(Callable<T> task)
上调用ExecutorService
方法(它自己用Executors.newCachedThreadPool()
构造)来启动异步计算,我可以等待计算完成并通过以下方式检索结果:致电Future.get()
。
我的问题是:如果计算已经完成,那么在我调用get()
之前会发生什么?在检索结果之前,线程是否被阻塞?是否存储结果并将线程分配给另一个任务?完全不同的东西?
提前感谢您的回答
答案 0 :(得分:4)
不,Thread没有被阻塞,它被返回到池中。
通常,get()
调用线程依赖于worker,而不是相反。因此,如果有结果,则返回,如果没有,请等待它可用。