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

标签 java java-5 threadpoolexecutor

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

最佳答案

您可以提交 Callables,但它们在内部被包装为 Runnables(实际上是 FutureTasks,它实现了 Runnable ). shutDownNow() 只会返回 Runnables,就像 jar 头上写的那样。

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

关于java - 为什么我不能用 BlockingQueue<Callable>; 实例化 ThreadPoolExecutor?为什么只有 BlockingQueue<Runnable>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18153496/

相关文章:

java - 两个类之间如何发生碰撞和 react ?

java - 在 JDK 1.5 中使用 Collections.newSetFromMap 的替代方案?

glassfish - 启动 glassfish 服务器时出现错误

Java:打包 Java 1.5 和 1.6 代码的最简单方法

java - 为什么 ThreadPoolExecutor 的 afterExecute() 异常为 null?

java - 子级中的 orderByValue [Firebase 数据库 Android]

Java 文件从一台服务器复制到另一台服务器

Java:在主函数中创建新的自定义对象?

java - 如何知道我的 threadPoolExecutor 中哪个特定的可运行程序已死亡?

java - Java ThreadPoolExecutor 测量任务在执行之前在队列中等待的时间