【问题标题】:Java Callable : What happens to the thread before get() is calledJava Callable:调用 get() 之前线程会发生什么
【发布时间】:2015-06-05 04:24:55
【问题描述】:

更准确地说:如果我通过在 ExecutorService(本身由 Executors.newCachedThreadPool() 构造)上调用 submit(Callable<T> task) 方法开始异步计算,我可以等待计算完成并通过调用 Future.get() 检索结果。

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

提前感谢您的回答

【问题讨论】:

    标签: java multithreading threadpool callable


    【解决方案1】:

    不,线程没有被阻塞,它被返回到池中。 一般来说,它是依赖于worker的get()调用线程,而不是相反。所以如果有结果,就返回,如果没有,就等到有结果了。

    【讨论】:

    • 感谢您的回答!只是为了确保我理解正确(对不起,英语不是我的母语):如果我启动多个线程进行计算并在所有完成后才检索结果,这不是问题,因为完成的任务不使用任何资源,对吧?
    • @shadow_heart 计算结果(=task)存储在Future对象中,所以你可以随时get()它。 get() 仅在计算尚未完成时阻塞调用线程。
    猜你喜欢
    • 2023-03-21
    • 2011-08-05
    • 2012-05-17
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    相关资源
    最近更新 更多