4

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

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

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

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

4

3 回答 3

2

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

于 2014-07-04T08:04:13.743 回答
2

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

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

于 2011-11-10T11:07:32.587 回答
1

答案为时已晚,但您为什么不将您的任务定义为具有某种易变的“isStarted”标志?然后,您可以在 catch 子句中查询标志。

于 2013-01-09T00:22:29.993 回答