这个问题与从shutdownNow()返回的列表无法转换为提交的Runnable有关
问题定义
我想从中获取运行时异常Runnable
,我只能使用submit() call which returns me Future<?>
.
如果我使用Submit
我会放松execute
. 因为我将不再能够使用shutdownNow()
来跟踪未启动的线程。
这是真的吗
如果我想从我的任务中捕获可运行异常,我将永远无法使用 shutdownnow 来找出未启动的任务。
这个问题与从shutdownNow()返回的列表无法转换为提交的Runnable有关
问题定义
我想从中获取运行时异常Runnable
,我只能使用submit() call which returns me Future<?>
.
如果我使用Submit
我会放松execute
. 因为我将不再能够使用shutdownNow()
来跟踪未启动的线程。
这是真的吗
如果我想从我的任务中捕获可运行异常,我将永远无法使用 shutdownnow 来找出未启动的任务。
您可以execute()
通过使用 FutureTask 的自定义子类(它是一个 Runnable)与 Future 一起使用。对于大多数 Executor,调用submit()
只是将 Runnable/Callable 与 FutureTask 封装在底层。在 FutureTask 的自定义子类中,保留对底层 Runnable/Callable 的引用并公开返回它的方法。那么,当你调用时shutdownNow()
,返回的 Runnables 应该是你自定义的 FutureTask 的实例。(令人烦恼的是,您需要将 FutureTask 子类化才能获得底层任务,但这就是它的方式)。