如何知道 java.util.concurrent Future Interface 是否仍然有效?

时间:2021-03-04 17:28:00

标签: java future

在我的应用程序中,我使用“提交(可调用任务)”方法将任务添加到“ScheduledThreadPoolExecutor”。该方法返回一个“未来”,我在另一个线程中评估其结果。但是这个线程运行其他代码,执行“Future.get()”可能需要一段时间。

我发现C++提供了一个“future::valid”函数来检查“future::get”返回的值是否仍然有效。但是 Java 既没有提供方法也没有提供指示“Future.get()”是否不再有效的方法(以防垃圾收集器已经从“ScheduledThreadPoolExecutor”队列中移除了相应的任务)。

推荐做什么?我是否应该尝试从读取线程中删除其余任务并让它尽快等待“Future.get()”?

1 个答案:

答案 0 :(得分:2)

Java 不是 C++。 Future.get() 是“有效的”,只要您有对所述变量的引用并且不会被垃圾收集器收集。

请注意,如果线程尚未完成执行,Future.get() 将阻塞。如果您需要在不阻塞的情况下检查结果是否准备好,Future 提供了 .isDone() 方法。

相关问题