3

这个问题与从shutdownNow()返回的列表无法转换为提交的Runnable有关

问题定义

我想从中获取运行时异常Runnable,我只能使用submit() call which returns me Future<?>.

如果我使用Submit我会放松execute. 因为我将不再能够使用shutdownNow()来跟踪未启动的线程。

这是真的吗

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

4

1 回答 1

1

您可以execute()通过使用 FutureTask 的自定义子类(它是一个 Runnable)与 Future 一起使用。对于大多数 Executor,调用submit()只是将 Runnable/Callable 与 FutureTask 封装在底层。在 FutureTask 的自定义子类中,保留对底层 Runnable/Callable 的引用并公开返回它的方法。那么,当你调用时shutdownNow(),返回的 Runnables 应该是你自定义的 FutureTask 的实例。(令人烦恼的是,您需要将 FutureTask 子类化才能获得底层任务,但这就是它的方式)。

于 2012-09-21T17:35:12.560 回答