更准确地说:如果我通过调用 submit(Callable<T> task)
开始异步计算ExecutorService
上的方法(本身由 Executors.newCachedThreadPool()
构建),我可以等待计算完成并通过调用 Future.get()
检索结果.
我的问题是:如果计算已经完成,在我调用 get()
之前会发生什么?在我检索结果之前线程是否被阻塞?是否存储结果并将线程分配给另一个任务?完全不同的东西?
预先感谢您的回答
最佳答案
No,Thread没有被阻塞,它被归还到池中。
一般是 get()
调用线程依赖于 worker,而不是相反。因此,如果有结果,则返回它,如果没有,则等待它可用。
关于Java 可调用 : What happens to the thread before get() is called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29375272/