此问题与List returned from shutdownNow() can not be converted to submitted Runnable
有关问题定义
我希望从Runnable
获得运行时异常,而我只能使用submit() call which returns me Future<?>
。
如果我使用Submit
,我会忽略execute
提供的功能。因为我将无法再使用shutdownNow()
来跟踪未启动的线程。
这是真的
如果我想从我的任务中捕获可运行的异常,我将永远无法使用shutdownnow来查找未启动的任务。
答案 0 :(得分:1)
您可以使用FutureTask的自定义子类(Runnable)将execute()
与Future结合使用。对于大多数执行程序,调用submit()
只需将RunTable / Callable包含在FutureTask下。在FutureTask的自定义子类中,保留对底层Runnable / Callable的引用,并公开返回它的方法。然后,当您调用shutdownNow()
时,返回的Runnables应该是您的自定义FutureTask的实例。 (令人恼火的是你需要继承FutureTask才能获得底层任务,但就是这样)。