【发布时间】:2021-03-04 17:28:00
【问题描述】:
在我的应用程序中,我使用“提交(可调用任务)”方法将任务添加到“ScheduledThreadPoolExecutor”。该方法返回一个“未来”,我在另一个线程中评估其结果。但是这个线程运行其他代码,执行“Future.get()”可能需要一段时间。
我发现C++提供了一个“future :: valid”函数来检查“future :: get”返回的值是否仍然有效。但是Java既没有提供方法也没有提供异常来指示“Future.get()”是否不再有效(如果垃圾收集器已经从“ScheduledThreadPoolExecutor”队列中移除了相应的任务)。
建议做什么?我是否应该尝试从读取线程中删除其余任务并使其尽快等待“Future.get()”?
【问题讨论】:
-
为什么GC会从队列中移除一个任务? “有效”是什么意思?
-
@AndyTurner 我假设 GC 负责从队列中删除已执行的非重复任务。我计划无限期地完成很多任务。那么我应该手动删除已经运行的任务吗?