gpt4 book ai didi

java - 取消后从 FutureTask 获取结果

转载 作者:行者123 更新时间:2023-11-30 09:04:58 25 4
gpt4 key购买 nike

考虑在 Callable 实例中进行长时间运行的计算。

并且考虑到这个计算的结果可以有一定的精度取决于计算时间,即:如果任务将被取消,那么它应该返回取消之前到目前为止计算的内容(例如,我们有一个计算无理数的传送带).

最好使用标准的 java 并发实用程序来实现此范例,例如

Callable<ValuableResult> task = new Callable<>() { ... };
Future<ValuableResult> future = Executors.newSingleThreadExecutor().submit(task);
try {
return future.get(timeout, TimeUnit.SECONDS);
} catch (TimeoutException te) {
future.cancel(true);
// HERE! Get what was computed so far
}

看来,如果不完全重新实现 FutureThreadPoolExecutor 接口(interface),这个问题就无法解决。 Java 1.7 中是否有任何方便的现有工具?

最佳答案

不是通过 Future 的 API 取消它,而是通过你自己的机制告诉它完成(比如你传递给构造函数的 long,它告诉它在返回之前运行多长时间通常;或者你设置为 true 的 AtomicBoolean

请记住,一旦任务真正开始,cancel (true) 不会神奇地停止它。然后它所做的就是中断线程。有几种方法可以检查此标志并抛出 InterruptedException,但否则您将必须手动检查 isInterrupted 标志。因此,鉴于您无论如何都需要编写该合作机制的代码,为什么不让它更适合您的要求呢?

关于java - 取消后从 FutureTask 获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25014512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com