1. 线程池创建参数
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory) {
this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,
threadFactory, defaultHandler);
}
- 核心线程数
- 最大线程数
- 存活时间
- 存活时间单位(秒,分)
- 阻塞队列
- 线程工厂(线程的属性)
2. 线程池工作原理
- execute方法提交任务时,判断核心线程数满了没,如果没满就新建一个线程执行任务。
- 如果核心线程数满了,就会把任务提交到阻塞队列中。
- 如果核心线程数和阻塞队列都满了,就会判断最大空闲线程数满了没,没满就新建一个线程去执行任务。
- 当阻塞队列和最大空闲线程数都满了,就会触发线程池的拒绝策略。
3. 拒绝策略
定义: 当最大线程数和workQueue队列都满了,就会触发拒绝策略。
在JDK中提供了RejectedExecutionHandler接口来执行拒绝操作,实现类有四个,对应了四种拒绝策略。