Java 可调用:在调用 get() 之前线程发生了什么
Java Callable : What happens to the thread before get() is called
更准确地说:如果我通过调用 ExecutorService
上的 submit(Callable<T> task)
方法开始异步计算(它本身是用 Executors.newCachedThreadPool()
构造的),我可以等待计算完成并检索通过调用 Future.get()
结果。
我的问题是:如果计算已经完成,在我调用 get()
之前会发生什么?在我检索结果之前线程是否被阻塞?是否存储结果并将线程分配给另一个任务?完全不同的东西?
提前感谢您的回答
不,线程没有被阻塞,它被returned到池中。
通常它是 get()
调用线程依赖于 worker,而不是相反。因此,如果有结果,return它,如果没有,等到它可用。
更准确地说:如果我通过调用 ExecutorService
上的 submit(Callable<T> task)
方法开始异步计算(它本身是用 Executors.newCachedThreadPool()
构造的),我可以等待计算完成并检索通过调用 Future.get()
结果。
我的问题是:如果计算已经完成,在我调用 get()
之前会发生什么?在我检索结果之前线程是否被阻塞?是否存储结果并将线程分配给另一个任务?完全不同的东西?
提前感谢您的回答
不,线程没有被阻塞,它被returned到池中。
通常它是 get()
调用线程依赖于 worker,而不是相反。因此,如果有结果,return它,如果没有,等到它可用。