线程池核心参数详解
线程池(这里使用的JDK自带的ThreadPoolExecutor)
代码如下:
1 | public class Main { |
1. corePoolSize参数
这个参数定义的是线程中的核心线程数,也就是在无任务时最小存在线程数(如果没有给核心线程设置过期时间)。
注意,核心线程在一开始是没有的,需要根据根据传入的任务进行生成(核心线程默认是懒加载的,可以进行设置创建时进行加载)。
2. maximumPoolSize参数
这个参数时最大线程数,也就是线程池中能达到的最多线程数(核心线程加非核心线程)。
如果传入的任务数在任务队列中满了。就会开始创建非核心线程,直到核心线程加非核心线程总数等于最大线程数。
3. keepAliveTime参数
这个参数是非核心线程的存活时间。
对于执行完成任务后,非核心线程会在这个时间后进行销毁,目的就是减少资源的消耗。
4. unit参数
这个参数表述的非核心线程的存活时间的单位。
5. workQueue参数
这个参数是存放任务的阻塞队列,用于存放核心线程不能立刻进行执行的任务。
6. threadFactory参数
这个参数是线程工厂,用于创建线程次中的线程。
7. handler参数
这个参数是线程池的拒绝策略,当线程池同时满足以下两个条件时,新提交的任务就会被拒绝:
- 线程池的核心线程数、最大线程数都已用完(线程池达到饱和);
- 任务队列也已经满了,无法再接收新任务。
在JDK中提供了4种拒绝策略:
- AbortPolicy:直接抛出 RejectedExecutionException 异常,拒绝接收任务。
- CallerRunsPolicy:不抛异常、不丢任务,而是让提交任务的线程自己执行这个任务。
- DiscardOldestPolicy:丢弃任务队列中最旧的任务(队列头部的任务),然后尝试将新任务加入队列。
- DiscardPolicy:静默丢弃新提交的任务,既不抛异常,也不执行任务。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Chu_Yu-blog!







