Java Callable:调用get()之前线程会发生什么

时间:2015-03-31 17:56:13

标签: java multithreading threadpool callable

更确切地说:如果我通过在submit(Callable<T> task)上调用ExecutorService方法(它自己用Executors.newCachedThreadPool()构造)来启动异步计算,我可以等待计算完成并通过以下方式检索结果:致电Future.get()

我的问题是:如果计算已经完成,那么在我调用get()之前会发生什么?在检索结果之前,线程是否被阻塞?是否存储结果并将线程分配给另一个任务?完全不同的东西?

提前感谢您的回答

1 个答案:

答案 0 :(得分:4)

不,Thread没有被阻塞,它被返回到池中。 通常,get()调用线程依赖于worker,而不是相反。因此,如果有结果,则返回,如果没有,请等待它可用。