我的理解是在1.5中添加了callable,可运行接口保持原样以防止世界终结。为什么我不能实例化 ThreadPoolExecutor
(core, max, tu, unit, new BlockingQueue<Callable>())
-为什么队列必须只能运行?在内部,如果我要提交,invokeAll,invokeAny可调用对象,这应该没事吧?另外, shutDownNow()
是否会返回可调用项列表?
最佳答案
您可以提交Callables
,但是它们在内部被打包为Runnables
(实际上是FutureTasks
,实现Runnable
)。 shutDownNow()
仅会返回Runnables
,就像在罐子上说的那样。
如果要获取尚未运行的Callables
列表,则需要以某种方式自己跟踪它们(例如,保留它们的列表,并让它们负责在被调用时将其从列表中删除)