> 文章列表 > JUC-02 ThreadPoolExecutor

JUC-02 ThreadPoolExecutor

JUC-02 ThreadPoolExecutor

下面的这3个问题你会吗?

  1. ThreadPoolExecutor 构造方法的7个参数了解吗?
  2. ThreadPoolExecutor 的执行流程了解吗?什么时候会创建临时线程
  3. 如何自定义线程工厂和拒绝策略?

构造函数

首先,我们来浅浅看一下。

这里有7个参数。他们的解释如下:

  1. corePoolSize: 要保留在池中的线程数,即使它们处于空闲状态,除非设置了 {@code allowCoreThreadTimeOut}
  2. maximumPoolSize: 池中允许的最大线程数
  3. keepAliveTime: 当线程数大于核心数时,多余的空闲线程等待新任务的最长时间,超过该时间则空闲线程终止。
  4. unit: {@code keepAliveTime} 方法参数对应的时间单位
  5. workQueue:存放等待执行的任务 的队列。此队列将仅包含 {@code execute} 方法提交的 {@code Runnable} 任务。
  6. threadFactory:executor中创建新线程时使用的线程工厂。
  7. handler:当线程达到上限并且队列满时,执行该策略处理新来的任务。

 

接下来,我这边绘制了一下线程池的流程图,我们就通过这个具体的流程图来学习一下这个参数的作用和影响。

这里需要注意下:是先让队列满了,再创建核心线程数外的线程。

这里需要思考一下为什么他要这么设计。个人认为主要是为了提高线程的复用,减小创建线程的开销,如果是先把线程创建满,那很有可能后续会有几个线程是空着的。而后创建线程,可以保证创建线程后,都是满负荷的去运行等待队列中的任务。

自定义线程工厂和拒绝策略

自定义线程

自定义拒绝策略

注意,拒绝策略会在 【等待队列满 并且 线程数也满】的情况下执行。

测试函数

运行结果

好的,看到这里对于ThreadPoolExecutor 的7个参数和自定义方法你了解了吗?

更多 视频 内容请
     1. 抖 音      搜索关注 “程序员一棵树”

     2. B站        搜索关注 “程序员一棵树”