线程池的扩容和缩容机制

线程池的主要参数:

corePoolSize(核心线程数):线程池中一直存活的线程数量,即使它们处于空闲状态也不会被销毁。

maximumPoolSize(最大线程数):线程池中允许的最大线程数量,包括空闲状态的线程和正在执行任务的线程。

workQueue(工作队列):存放等待执行的任务的队列。当任务提交到线程池时,会先放入工作队列。

keepAliveTime(线程空闲时间):空闲线程的最大存活时间,超过这个时间空闲线程将被销毁,仅当线程数量超过核心线程数时生效。

RejectedExecutionHandler(任务拒绝处理器):当任务无法被执行时的处理策略。

线程池扩容机制

触发条件

  • 新任务提交时核心线程已满且工作队列已满

  • 当前线程数 < 最大线程数(maximumPoolSize)

扩容过程

  1. 检查当前线程数是否小于核心线程数(corePoolSize)
    创建新线程(即使有空闲线程)

  2. 核心线程已满时,任务进入工作队列
    工作队列已满且线程数 < maximumPoolSize时:
    创建新线程处理任务
    新线程是非核心线程(可被回收)

线程池缩容机制

触发条件

  • 线程空闲时间超过keepAliveTime
  • 当前线程数 > corePoolSize

缩容过程
1、工作线程从队列获取任务时:

  • 使用poll(keepAliveTime, unit)代替阻塞take()

  • 如果在keepAliveTime内未获取到任务,返回null

2、线程退出前会检查:

  • 是否需要补充线程(保持不小于corePoolSize)

  • 是否需要终止(当前线程数 > corePoolSize)

posted @ 2025-04-17 11:13  蒟蒻00  阅读(92)  评论(0)    收藏  举报