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

如何知道java.util.concurrent Future接口是否仍然有效?,java,future,Java,Future,在我的应用程序中,我使用“提交(可调用任务)”方法向“ScheduledThreadPoolExecutor”添加一个任务。该方法返回一个“Future”,我在另一个线程中对其结果求值。但是这个线程运行其他代码,执行“Future.get()”可能需要一些时间 我发现C++提供了一个“future::valid”函数来检查“future::get”返回的值是否仍然有效。但是Java既不提供方法也不提供异常来指示“Future.get()”是否不再有效(如果垃圾收集器已经从“ScheduledTh

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

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


建议做什么?我应该尝试从读取线程中删除其余的任务,并让它尽快地等待“Futur.GET”吗?< /P> < P> java不是C++。code>Future.get()是“有效的”,只要您有对所述变量的引用,并且不会被垃圾收集器收集


请注意,如果线程尚未完成执行,
Future.get()
将阻塞。如果需要检查结果是否准备好,没有阻塞,<代码>将来<代码>提供<代码> .ISDONE()/SCOR>方法。< /P> < P> java不是C++。code>Future.get()是“有效的”,只要您有对所述变量的引用,并且不会被垃圾收集器收集


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

GC为什么要从队列中删除任务?“有效”是什么意思?@AndyTurner我假设GC负责从队列中删除非重复的已执行任务。我计划无限期地完成很多任务。那么,我应该手动删除已经运行的任务吗?为什么GC会从队列中删除任务?“有效”是什么意思?@AndyTurner我假设GC负责从队列中删除非重复的已执行任务。我计划无限期地完成很多任务。那么,我应该手动删除已经运行的任务吗?我假设垃圾收集器会自动将已经执行的非重复性任务排出队列。但是(我希望我能正确理解您的意思)如果我删除任务返回的“Future”引用,GC会从队列中删除任务吗?我需要无限期地放置大量任务,因此我必须以某种方式释放队列。不,取消对未来的引用不会从队列中删除任务——它只会使您无法获得任务的结果。我假设垃圾收集器会自动将已执行的非重复性任务从队列中移出。但是(我希望我能正确理解您的意思)如果我删除任务返回的“Future”引用,GC会从队列中删除任务吗?我需要无限期地放置大量任务,因此我必须以某种方式释放队列。不,取消对未来的引用不会将任务从队列中移除——它只会使您无法获得任务的结果。