UML简要类图关系:

下面详细看一下三者的区别:
Executor vs ExecutorService vs Executors

正如上面所说,这三者均是Executor框架中的一部分。Java开发者很有必要学习和理解他 们,以便更高效的使用Java提供的不同类型的线程池。总结一下这三者间的区别,以便大家 更好的理解:
1、Executor 和 ExecutorService 这两个接口主要的区别是:ExecutorService 接口继承了 Executor 接口,是 Executor 的子接口

2、 Executor 和 ExecutorService 第二个区别是:Executor 接口 定义了 execute()方法用 来接收一个Runnable接口的对象,而ExecutorService接口中的submit()方法可以接受 Runnable 和 Callable 接口的对象。
3、 Executor和ExecutorService接口第三个区别是Executor中的execute()方法不返回 任何结果,而ExecutorService中的submit()方法可以通过一个Future对象返回运算结果。
4、 Executor和ExecutorService接口第四个区别是除了允许客户端提交一个任务, ExecutorService还提供用来控制线程池的方法。比如:调用shutDown()方法终止线程池。 可以通过《Java Concurrency in Practice》一书了解更多关于关闭线程池和如何处理 pending的任务的知识。
5、 Executors类提供工厂方法用来创建不同类型的线程池。比
如:newSingleThreadExecutor()创建一个只有一个线程的线程池,newFixedThreadPool (int numOfThreads)来创建固定线程数的线程池,newCachedThreadPoo1()可以根据需要创建新的线 程,但如果已有线程是空闲的会重用已有线程。
总结
下表列出了 Executor 和 ExecutorService 的区别:
Executor ExecutorService
Executor是Java线程池的核心接口,用来并ExecutorService是Executor接口的扩展, 提供了异步执行和关闭线程池的方法
提供submit()方法用来提交任务
submit()方法返回Future对象,可用来获取任 务执行结果
可以通过Future.cancel()取消pending中的 任务
提供了关闭线程池的方法

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.