有没有 Executor 的使用场景而不是 ExecutorService?Executor 接口的目的是什么?

7

我想知道是否有使用Executor而不是ExecutorService的理由。

据我所知,JDK中实现了Executor接口的所有对象都同时是ExecutorService,这意味着您必须关闭服务以避免内存泄漏。您不能关闭Executor,但可以通过ExecutorService来做到这一点。

那么,在什么情况下会使用Executor呢?

private final Executor _executor = Executors.newCachedThreadPool();
Executor接口背后的意图是什么?请举例说明。
1个回答

7

JavaDoc在这种情况下是您的好帮手。

此接口提供了一种将任务提交与每个任务的运行方式(包括线程使用、调度等细节)解耦的方法。

往下读,您会发现:

然而,Executor接口并不严格要求执行是异步的。在最简单的情况下,执行程序可以立即在调用者的线程中运行已提交的任务:

 class DirectExecutor implements Executor {
     public void execute(Runnable r) {
         r.run();
     }
 }

这些定义对我来说已经很具表现力了。

关于你的使用示例。 在我看来,不,我永远不会像那样使用这个接口。
然而它可能被用作一个可接受的参数。

例如。 我想运行一个任务,但我想让我的方法的用户决定如何运行此任务。

public void run(final Executor taskExecutor) {
   taskExecutor.execute(this.myTaskRunnable);
}
< p > Executor 实现可以是任何后台执行方式,它可能是同步的(就像上面的示例)或异步的,但我并不真正关心。
它是由用户来负责处理的。 < / p >

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接