前言
在实际开发中,线程池的创建不能使用Exectors去创建线程池,而是采用最原始的ThreadPoolExecutor来创建线程池,这样可以让编写人员更加明确线程池的运行规则,避免不必要的错误。下面我们就来看看ThreadPoolExecutor的构造参数以及它们的作用。
一、构造函数
ThreadPoolExecutor一共有四种有参构造,下面只给出参数最全的构造函数
ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,
long keepAliveTime, TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
二、参数解释
- corePoolSize:即使空闲时仍保留在池中的线程数(核心线程数)
- maximumPoolSize:池中允许的最大线程数(核心线程数+救急线程数)
注:救急线程是在任务数大于核心线程数时创建的线程,用于救急,用完以后过指定时间自动销毁 - keepAliveTime:当线程数大于内核时,这是多余的空闲线程在终止前等待新任务的最大时间。
- unit:keepAliveTime参数的时间单位
- workQueue:用于在执行任务之前使用的队列。 这个队列将仅保存execute方法提交的Runnable任务。
- threadFactory:执行程序创建新线程时使用的工厂
- handler:达到线程限制和队列容量时,执行的拒绝策略
三、案例分析
- 自定义Runnable实现类
class MyRunnable implements Runnable {
@Override
public void run() {
try {
Thread.sleep(1);
}