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