为什么我不能用BlockingQueue <Callable>实例化ThreadPoolExecutor; 为什么只有BlockingQueue <Runnable>?

Saa*_*aad 3 java jdk1.5 threadpoolexecutor

我的理解是在1.5中添加了callable,并且runnable接口保持原样以防止世界结束.为什么我不能实例化- 为什么队列必须只运行runnable?在内部,如果我要提交,invokeAll,invokeAny callables,这应该没问题吧?还会返回一个callables列表吗?ThreadPoolExecutor(core, max, tu, unit, new BlockingQueue<Callable>())shutDownNow()

Dav*_*les 8

你可以提交Callables,但它们被内部包装Runnables(实际上FutureTasks,哪个实现Runnable).shutDownNow()只会Runnables像在锡上所说的那样回归.

如果你想得到Callables那些尚未运行的列表,你需要以某种方式自己跟踪它们(例如,保留它们的列表并让它们负责在它们被调用时从列表中删除它们. )