我的理解是 callable 是在 1.5 中添加的,并且 runnable 接口保持原样以防止世界结束。为什么我不能实例化 a - 为什么队列必须只取可运行?在内部,如果我要提交、invokeAll、invokeAny 可调用对象,这应该没问题吧?另外,会返回一个可调用的列表吗?ThreadPoolExecutor
(core, max, tu, unit, new BlockingQueue<Callable>())
shutDownNow()
问问题
3250 次
3 回答
9
您可以提交Callables
,但它们在内部被包装为Runnables
(实际上FutureTasks
是实现Runnable
)。shutDownNow()
只会回来Runnables
,就像罐头上说的那样。
如果您想获取Callables
尚未运行的列表,您需要以某种方式自己跟踪它们(例如,保留它们的列表并让它们负责在调用时将自己从列表中删除。 )
于 2013-08-09T18:54:06.303 回答
2
作为更一般的答案,您不能通过更改类型参数来影响 Java 程序的运行时行为。if
不能根据类型参数重新路由任何分支。如果您发现自己处于希望从 API 获得不同行为的情况,请不要在选择类型参数时寻找解决方案。
在这种特殊情况下,aRunnable
是一种更通用的对象类型:它是 Executor 内部可以提交给线程的工作单元。例如,Runnable
可以包含调用 aCallable
并将其结果保存在某处的代码。
于 2013-08-09T18:46:57.933 回答