Executor 代替 ExecutorService 有啥场景吗? Executor 接口背后的意图?

Posted

技术标签:

【中文标题】Executor 代替 ExecutorService 有啥场景吗? Executor 接口背后的意图?【英文标题】:Is there any scenario for Executor instead of ExecutorService. Intention behind Executor interface?Executor 代替 ExecutorService 有什么场景吗? Executor 接口背后的意图? 【发布时间】:2019-03-08 08:40:24 【问题描述】:

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

据我所知,JDK 中没有实现Executor 接口,它也不是ExecutorService,这意味着您必须关闭服务才能避免内存泄漏。您无法关闭 Executor,但您可以使用 ExecutorService 来完成此操作。

那么,在任何情况下你会使用这样的东西吗:

private final Executor _executor = Executors.newCachedThreadPool();

Executorinterface 背后的意图是什么?示例赞赏。

【问题讨论】:

【参考方案1】:

JavaDoc 在这种情况下是你的朋友

此接口提供了一种将任务提交与 每个任务将如何运行的机制,包括线程的详细信息 使用、调度等

往下看

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

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

这些定义对我来说已经很形象了。

关于您的使用示例。恕我直言,不,我永远不会那样使用这个接口。但是它可能被用作接受参数。

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

public void run(final Executor taskExecutor) 
   taskExecutor.execute(this.myTaskRunnable);

Executor 实现可以在幕后进行,它可能是同步的(如上面的示例)或异步的,但我并不关心。用户会小心处理。

【讨论】:

以上是关于Executor 代替 ExecutorService 有啥场景吗? Executor 接口背后的意图?的主要内容,如果未能解决你的问题,请参考以下文章

安卓Android开发:使用Executor线程池代替AsyncTask进行异步操作

安卓Android开发:使用Executor线程池代替AsyncTask进行异步操作

execute和submit的区别与联系

ThreadExecutorPool 线程池组件

FixedThreadPool使用demo

Spark Executor内幕彻底解密:Executor工作原理图ExecutorBackend注册源码解密Executor实例化内幕Executor具体工作内幕