ExecutorService:如何检查我的Callable是否正在执行



我使用ExecutorService来处理来自多个线程的任务请求,并使用ExecutorService#submit()返回的Future来跟踪任务的进度。

我想删除请求,并在超时后给请求者一个反馈,如果他们的请求还没有被处理。

所以我想知道任务请求当前是否正在被处理,如果是,那么我将等待它完成,否则我将取消它并向请求者提供反馈。

任何帮助和提示将不胜感激。谢谢!

如果您使用Future.cancel(false),它将允许任务运行到完成,如果它已经启动。即使你使用cancel(true),它也可能这样做,除非会话执行的操作是可中断的,或者你检查了中断标志。

我怀疑你不需要知道任务是否已经开始。即使您有此方法,也有可能在您检查时任务尚未启动,但在您尝试取消它时已启动。

我知道这是一个老问题,但是使用Future.isDone()呢?

太晚了,但为什么不定义你的任务有某种易失的"isStarted"标志?然后,您可以在catch子句中查询标志。

相关内容

  • 没有找到相关文章

最新更新