线程池是基于池的线程管理机制。

七大属性:

  • 核心线程数
  • 最大线程数
  • 超时时间
  • TimeUnit 线程超时时间单位
  • 缓冲队列
  • 拒绝策略
  • 线程工厂

优先顺序:

  • 核心线程数
  • 缓冲队列Capacity 容量
  • 最大线程数

任务提交

当一个新任务通过execute()或submit()方法提交到线程池时,线程池会按照以下流程处理:

  1. 首先检查核心线程数(corePoolSize)。如果当前运行的线程数小于核心线程数,则创建新线程来执行任务,即使其他线程可能处于空闲状态。
  2. 如果运行的线程数等于或大于核心线程数,则将任务加入工作队列(workQueue)。
  3. 如果工作队列已满,且运行的线程数小于最大线程数(maximumPoolSize),则创建新的线程来处理任务。
  4. 如果工作队列已满,且运行的线程数等于最大线程数,则根据拒绝策略(RejectedExecutionHandler)来处理该任务。

如果设置了允许核心线程超时,那么核心线程在空闲超过keepAliveTime后也会被回收

202010091106-为什么要使用线程池

ThreadPool 通过线程池创建线程

2016-05-26-spring-threadpooltaskexecutor