- corePoolSize:核心线程的数量
- maximumPoolSize: 池中允许的最大线程,这个参数表示了线程池中最多的线程数量
- keepAliveTime :线程空闲存活时间–线程不做事情一段时间后会被回收掉。一般回收非核心线程,核心线程在设置allowCoreThreadTimeOut(true)之后也会被回收。
- unit :KeepAliveTime的时间单位
- workQueue :工作队列,存放等待执行的任务。
- threadFactory: 执行程序创建新线程时使用的工厂
- handler: 由于超出线程范围和队列容量而使执行被阻塞时使用的处理程序
工作流程
1 当一个任务通过submit或者execute方法提交到线程池的时候,如果当前池中线程数(包括闲置线程)小于coolPoolSize,则创建一个线程执行该任务。
2 如果当前线程池中线程数已经达到coolPoolSize,则将任务放入等待队列。
3 如果任务不能入队,说明等待队列已满,若当前池中线程数小于maximumPoolSize,则创建一个临时线程(非核心线程)执行该任务。
4 如果当前池中线程数已经等于maximumPoolSize,此时无法执行该任务,根据拒绝执行策略处理。
注意:当池中线程数大于coolPoolSize,超过keepAliveTime时间的闲置线程会被回收掉。回收的是非核心线程,核心线程一般是不会回收的。如果设置allowCoreThreadTimeOut(true),则核心线程在闲置keepAliveTime时间后也会被回收。
任务队列是一个阻塞队列,线程执行完任务后会去队列取任务来执行,如果队列为空,线程就会阻塞,直到取到任务。