前面的例子中总是需要线程时就创建,不需要就销毁它。但频繁创建和销毁线程是很耗资源的,在并发量较高的情况下频繁创建和销毁线程会降低系统的效率。线程池可以通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
参考JDK1.8中的相关类,画出下图。
(此图不是十分准确,有些类实现了两个接口,这里只展示出了一个)
本章只是简单地介绍下它们,在以后的文章中会选一些最重要的来学习。
Executor
此接口提供一种将任务提交与每个任务将如何运行的机制分离开来的方法。它只提供了execute(Runnable)这么一个方法,用于执行已提交的Runnable任务。
ExecutorService
继承了Executor接口,用于提交一个用于执行的Runnable任务、试图停止所有正在执行的活动任务,暂停处理正在等待的任务、执行给定的任务。
AbstractExecutorService
提供了ExecutorService的默认实现。
ThreadPoolExecutor
提供一个可扩展的线程池实现,是最出名的“线程池”。
ForkJoinPool
JDK1.7中新增的一个线程池,与ThreadPoolExecutor一样,同样继承了Abstract