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();
Executor
interface 背后的意图是什么?示例赞赏。
【问题讨论】:
【参考方案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进行异步操作
Spark Executor内幕彻底解密:Executor工作原理图ExecutorBackend注册源码解密Executor实例化内幕Executor具体工作内幕