张治峰的博客

ThreadPoolExecutor介绍和使用

2021-07-27

ThreadPoolExecutor 类分析

线程池实现类 ThreadPoolExecutor 是 Executor 框架最核心的类。

构造方法

ThreadPoolExecutor 类中提供的四个构造方法。我们来看参数最多的那个(一般看源码关注参数最多构造方法),其余三个都是在这个构造方法的基础上产生。

public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler) {
if (corePoolSize < 0 ||
maximumPoolSize <= 0 ||
maximumPoolSize < corePoolSize ||
keepAliveTime < 0)
throw new IllegalArgumentException();
if (workQueue == null || threadFactory == null || handler == null)
throw new NullPointerException();
this.acc = System.getSecurityManager() == null ?
null :
AccessController.getContext();
this.corePoolSize = corePoolSize;
this.maximumPoolSize = maximumPoolSize;
this.workQueue = workQueue;
this.keepAliveTime = unit.toNanos(keepAliveTime);
this.threadFactory = threadFactory;
this.handler = handler;
}

参数

这些参数特别重要,在后面使用线程池的过程中你一定会用到!所以,请认真做好笔记。

  • corePoolSize 【核心线程数】: 主要工作线程,默认使用后不会销毁。
  • maximumPoolSize 【最大线程数】 当任务队列满了时,可同时运行的线程数量变为最大线程数。

  • workQueue 【工作队列】: 当前运行的线程数等于核心线程数,则新增的任务会存入工作队列。

  • keepAliveTime 【存活时间】: 当线程池中的线程数量大于 核心线程数量 时,池中线程空闲时间大于 keepAliveTime 的线程会被回收,直到池中线程数量等于核心线程数量停止回收。

  • unit :keepAliveTime 参数的时间单位。

  • threadFactory : 线程池中线程创建的工厂。

  • handler 【饱和策略】:线程池满了对新任务的操作策略。

Tags: java
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章