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