我的理解是在1.5中添加了callable,可运行接口保持原样以防止世界终结。为什么我不能实例化 ThreadPoolExecutor (core, max, tu, unit, new BlockingQueue<Callable>())-为什么队列必须只能运行?在内部,如果我要提交,invokeAll,invokeAny可调用对象,这应该没事吧?另外, shutDownNow() 是否会返回可调用项列表?

最佳答案

您可以提交Callables,但是它们在内部被打包为Runnables(实际上是FutureTasks,实现Runnable)。 shutDownNow()仅会返回Runnables,就像在罐子上说的那样。

如果要获取尚未运行的Callables列表,则需要以某种方式自己跟踪它们(例如,保留它们的列表,并让它们负责在被调用时将其从列表中删除)

09-27 07:36