我使用ExecutorService
来处理来自多个线程的任务请求,并使用ExecutorService#submit()
返回的Future
来跟踪任务的进度。
我想删除请求,并在超时后给请求者一个反馈,如果他们的请求还没有被处理。
所以我想知道任务请求当前是否正在被处理,如果是,那么我将等待它完成,否则我将取消它并向请求者提供反馈。
任何帮助和提示将不胜感激。谢谢!
如果您使用Future.cancel(false)
,它将允许任务运行到完成,如果它已经启动。即使你使用cancel(true)
,它也可能这样做,除非会话执行的操作是可中断的,或者你检查了中断标志。
我怀疑你不需要知道任务是否已经开始。即使您有此方法,也有可能在您检查时任务尚未启动,但在您尝试取消它时已启动。
我知道这是一个老问题,但是使用Future.isDone()呢?
太晚了,但为什么不定义你的任务有某种易失的"isStarted"标志?然后,您可以在catch子句中查询标志。