java - 为什么 Executor 接口(interface)没有一个以 Callable 为参数的方法?

标签 java concurrency executorservice callable

从这里answer我了解到 CallableRunnable 之间的唯一区别是前者可以返回执行结果并抛出异常。

我不明白为什么Executor没有定义采用 Callable 的方法:

void execute(Callable command);

在我看来,为 RunnableCallable 创建方法是合乎逻辑的。在 ExecutorService ,它是 Executor 的子接口(interface),RunnableCallable 都有类似的 submit() 方法。

请解释一下这个设计决定,因为我在 Internet 上找不到任何解释。

最佳答案

I don't understand why Executor doesn't define a method which takes a Callable.

Executor 具有单一职责 - 执行提交的任务。在此抽象级别上,仅使用 Runnable 的 API 不需要 ExecutorService 提出的附加功能。

It'd be logical to create methods for both Runnable and Callable.

是的,因此ExecutorService接口(interface)是通过扩展Executor来设计的。 ExecutorService 提供了一个显着的区别 - 提供任务执行的结果。这就是为什么 CallableTimeUnit 和生命周期添加了方法。

关于java - 为什么 Executor 接口(interface)没有一个以 Callable 为参数的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47433992/

相关文章:

ruby-on-rails - 如何使用 RSpec Controller 规范触发并发请求?

java - 执行器服务: Why a program never stops?

java - 有没有办法让线程池线程退出处理给定的任务?

java - Android 库 zip

java - Java Apache HttClient : ThreadSafe or not?

java - 将 CodeStar Spring MVC 项目改为 Spring Boot

java - 生产者/消费者工作队列

java - JAXB : unmarshalexception - with linked exception: [java. io.IOException:流已关闭]

c# - 并行执行使用异步的循环

concurrency - 为什么 'if let' 会阻止使用 Mutex 的执行?