使用RunnableException的Submit和ShutdownNow的Executor Service问题

时间:2012-09-21 16:32:49

标签: java executorservice

此问题与List returned from shutdownNow() can not be converted to submitted Runnable

有关

问题定义

我希望从Runnable获得运行时异常,而我只能使用submit() call which returns me Future<?>

如果我使用Submit,我会忽略execute提供的功能。因为我将无法再使用shutdownNow()来跟踪未启动的线程。

这是真的

如果我想从我的任务中捕获可运行的异常,我将永远无法使用shutdownnow来查找未启动的任务。

1 个答案:

答案 0 :(得分:1)

您可以使用FutureTask的自定义子类(Runnable)将execute()与Future结合使用。对于大多数执行程序,调用submit()只需将RunTable / Callable包含在FutureTask下。在FutureTask的自定义子类中,保留对底层Runnable / Callable的引用,并公开返回它的方法。然后,当您调用shutdownNow()时,返回的Runnables应该是您的自定义FutureTask的实例。 (令人恼火的是你需要继承FutureTask才能获得底层任务,但就是这样)。