一、基本概述
Executor框架是Java5引入的,用于简化线程管理和调度。核心思想是将任务的提交与执行分离。Executor接口位于Java.util.concurrent并发编程核心包下。
二、类和接口的关系
Executor (接口)最基本的接口
↑
ExecutorService (接口)扩展更多功能
↑
AbstractExecutorService (抽象类)
↑
ThreadPoolExecutor (具体类)
↑
ScheduledThreadPoolExecutor (具体类)支持定时任务
三、线程池核心类
public class ThreadPoolExecutor extends AbstractExecutorService {
// 核心构造方法
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler) {
// ...
}
}
七个参数:
1.corePoolSize 核心线程数
2.keepAliveTime最大线程数
3.keepAliveTime存活时间
4.unit 存活时间的单位
5.workQueue阻塞队列
6.创建线程的工厂
7.执行的拒绝策略
四、执行顺序
a、线程池创建,生成核心线程数的线程core
b、任务持续进来,当core满了后,任务进入阻塞队列。阻塞队列有一个size。
c、阻塞队列满了后,就会开启max-core的线程,即启动新的线程,直到max。
d、当max线程也满了后,就执行拒绝策略代码。
e、当max-core线程空闲下来,空闲的时间超过存活时间,则释放
五、其他
1拒绝策略:丢弃,同步调用,丢弃并抛异常,丢弃当前,丢弃老的等等。
2作用:降低资源的消耗,提高响应速度,提供可管理性。
3核心线程也可以释放,通过设置。