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

时间:2011-11-10 10:34:24

标签: java future executorservice

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

我想删除请求,如果在一段时间后他们的请求还没有得到处理,我会向请求者提供反馈。

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

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

3 个答案:

答案 0 :(得分:2)

如果您使用Future.cancel(false),它将允许任务在已经启动的情况下运行完成。即使您使用cancel(true),它也可以这样做,除非谈话执行可中断的操作或检查中断的标志。

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

答案 1 :(得分:1)

答案太迟了,但为什么不定义你的任务以获得某种易变的“isStarted”标志?然后,您可以在catch子句中查询该标志。

答案 2 :(得分:0)

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