优点:
- 通过线程池机制,实现线程复用,避免频繁地进行 Thread 线程对象的创建和销毁,提高了在执行大量任务时的性能,也避免了之前哪种对于每个任务都需要显式创建一个 Thread 线程对象来执行的问题。
- 通过设置内部的 Thread 线程池和任务等待队列的大小,可以根据当前系统资源情况,灵活控制系统的最大资源开销,避免创建过多线程或者在任务等待队列存放过多任务,造成系统资源的过多消耗。
- Executor 线程池框架也提供了审计功能,即提供了任务执行情况的统计功能,如当前的 Executor 线程池实例一共执行了多少个任务。
Executor 接口
包含一个 execute 方法,表示提交任务给线程池执行。
public interface Executor {
//提交一个任务到线程池异步执行
void execute(Runnable command);
}
ExecutorService 接口
继承于 Executor 接口,增加了线程池的关闭、任务执行结果的返回功能。
public interface Executor {
...
void shutdown();
Future<?> submit(Runnable task);
...
}
Future 类提供异步获取任务的执行结果的功能,故可以在应用程序中获取此次提交任务的执行结果。
ThreadPoolExecutor 线程池
ThreadPoolExecutor 是 Executor 线程池框架的具体实现,是我们在应用程序种定义线程池时最常用的一个类,是 Executor 线程池框架提供给应用程序使用的一个核心类。
对于 ThreadPoolExecutor 构造函数,有以下参数:
- corePoolSize:线程池中核心线程的数量
- maximumPoolSize:线程池的最大值,线程池最多可以创建的线程数
- keepAliveTime:如果线程池中的线程数量超过了 corePoolSize,且存在空闲线程,则空闲时间超过 keepAliveTime 时,线程就会被销毁回收。
- workQueue:线程池中没有空闲线程时,新提交的任务进入该任务等待队列。
- threadFactory:线程池的线程创建工厂类。
- RejectedExecutionHandler:任务拒绝策略。