1. corePoolSize: 核心线程数,能够同时执行的任务数量
2. maximumPoolSize:除去缓冲队列中等待的任务,最大能容纳的任务 数(其实是包括了核心线程池数量)
3. keepAliveTime:超出workQueue的等待任务的存活时间,就是指maximumPoolSize里面的等待任务的存活时间
4. unit:时间单位
5. workQueue: 阻塞等待线程的队列,一般使用new LinkedBlockingQueue()这个,如果不指定容量,会一直往里边添加,没有限制,workQueue永远不会满,一般选择没有容量上限的队列;
6. threadFactory:创建线程的工厂,使用系统默认的类
7. handler:当任务数超过maximumPoolSize时,对任务的处理策略,默认策略是拒绝添加
new ThreadPoolExecutor (
corePoolSize, // 核心线程池数量,表示能够同时执行的任务数量
maximumPoolSize,// 最大线程池数量,其实是包含了核心线程池数量在内的,当缓冲队列满的时候会放入最大线程池等待
keepAliveTime, // 存活时间,表示最大线程池中等待任务的存活时间
unit, // 存活时间的时间单位
new LinkedBlockingQueue<Runnable>(), // 缓冲队列,超出核心线程池的任务会被放入缓存队列中等待
Executors.defaultThreadFactory(), // 创建线程的工厂类
new ThreadPoolExecutor.AbortPolicy() // 当最大线程池也超出的时候,则拒绝执行
);
执行流程:
当线程数小于corePoolSize时,每添加一个任务,则立即开启线程执行
当corePoolSize满的时候,后面添加的任务将放入缓冲队列workQueue等待;
当workQueue也满的时候,看是否超过maximumPoolSize线程数,如果超过,默认拒绝执行,如果没有超过,则创建线程立即执行。