上篇记录了线程池的几个参数。 这里记录一下添加任务,以及任务去执行的路上发生了什么.

ThreadPoolExecutor 类图

image.png

提交任务心路历程

image.png

  • 如果正在运行的线程数小于核心数,新起线程来执行提交的任务
    • addWorker()
  • 将新任务放入队列
    • 重新检查线程池的运行状态,如果处理shutdown等停止状态,从queue中移除任务并且进入reject逻辑
    • 如果当前运行的线程数量为0,新起线程(获取队列任务 && 执行)
  • 新起非核心线程运行当前任务。
  • 拒绝执行新任务,进入reject逻辑。

线程池随机抽查结果

线程.png