目录
一、线程池的创建以及参数
二、任务提交的方法
三、线程池参数解释
四、线程池原理
五、线程池原理图
六、execute方法执行流程图
一、线程池的创建以及参数
public ThreadPoolExecutor(int corePoolSize, //核心线程数
int maximumPoolSize, //最大线程数
long keepAliveTime, //线程允许的空闲时间
TimeUnit unit, //keepAliveTime的时间单位
BlockingQueue<Runnable> workQueue, //阻塞队列
ThreadFactory threadFactory, //创建线程工厂
RejectedExecutionHandler handler //拒绝策略)
二、任务提交的方法
public void execute() //提交任务无返回值
public Future<?> submit() //任务执行完成后有返回值
三、线程池参数解释
corePoolSize:线程池中的核心线程数,当提交一个任务时,线程池创建一个新线程执行任务,直到当前线程数等于corePoolSize。
maximumPoolSize:线程池中允许的最大线程数。如果当前阻塞队列满了,且继续提交任务,则需要创建非核心线程数执行任务,核心线程数和非核心线程数的总数小于或者等于maximumPoolSize。
KeepAliveTime:线程池维护线程允许的空闲时间。当线程池中的线程数量大于corePoolSize,如果这时没有新的任务提交,核心线程外的线程不会立即销毁,会等到时间超过keepAliveTime之后销毁。
unit:keepAliveTime的时间单位。
workQueue:用来保存等待被执行任务的阻塞队列,且任务必须实现Runable接口。
threadFactory:用来创建线程。
handler:拒绝策略,①:AbortPolicy:直接抛出异常,默认策略,②:CallerRunsPolicy:用调用者所在的线程来执行任务,③:DiscardOldestPolicy:丢弃阻塞队列中靠最前的任务,并执行当前任务,④:DiscardPolicy:直接丢弃任务。
四、线程池原理
1、线程提交任务到线程池,线程池创建核心线程数,直到线程数等于corePoolSize;
2、由于线程池中线程数是核心线程数,再提交来的任务不会直接提交到线程池中线程,而是放到队列中,线程池中的线程去队列中获取任务;
3、如果阻塞队列满了,则开始创建非核心线程数来执行任务,线程数小于maximumPoolSize;
4、如果阻塞队列满了且线程数等于maximumPoolSize,那么需通过handler所指定的策略来处理任务;
5、当线程池中数量大于corePoolsize,如果某个非核心线程空闲时间超过KeepAliveTime,线程将被终止。
五、线程池原理图
![](https://img-blog.csdnimg.cn/d9af93d1e7d94104a6c0077a2f242125.png)
六、execute方法执行流程图
![](https://img-blog.csdnimg.cn/c2a121fb9e954a229271e1ee20ac48e0.png)