UML简要类图关系:
下面详细看一下三者的区别:
正如上面所说,这三者均是 Executor 框架中的一部分。Java 开发者很有必要学习和理解他们,以便更高效的使用 Java 提供的不同类型的线程池。总结一下这三者间的区别,以便大家更好的理解:
execute()
方法用来接收一个Runnable
接口的对象,而 ExecutorService 接口中的 submit()
方法可以接受Runnable
和Callable
接口的对象。execute()
方法不返回任何结果,而 ExecutorService 中的 submit()
方法可以通过一个 Future 对象返回运算结果。shutDown()
方法终止线程池。可以通过 《Java Concurrency in Practice》 一书了解更多关于关闭线程池和如何处理 pending 的任务的知识。newSingleThreadExecutor()
创建一个只有一个线程的线程池,newFixedThreadPool(int numOfThreads)
来创建固定线程数的线程池,newCachedThreadPool()
可以根据需要创建新的线程,但如果已有线程是空闲的会重用已有线程。下表列出了 Executor 和 ExecutorService 的区别:
Executor | ExecutorService |
---|---|
Executor 是 Java 线程池的核心接口,用来并发执行提交的任务 | ExecutorService 是 Executor 接口的扩展,提供了异步执行和关闭线程池的方法 |
提供execute()方法用来提交任务 | 提供submit()方法用来提交任务 |
execute()方法无返回值 | submit()方法返回Future对象,可用来获取任务执行结果 |
不能取消任务 | 可以通过Future.cancel()取消pending中的任务 |
没有提供和关闭线程池有关的方法 | 提供了关闭线程池的方法 |
</div>
Executor , ExecutorService 和 Executors
原文:https://www.cnblogs.com/edda/p/12609475.html