在Java中,线程池是通过 java.util.concurrent 包中的 ThreadPoolExecutor 类来实现的。创建线程池时可以指定多个参数来控制线程池的行为和性能。以下是 ThreadPoolExecutor 的主要参数及其功能:

核心参数

  1. corePoolSize(核心线程数)
  • 功能:线程池中始终保持的最小线程数,即使这些线程处于空闲状态。
  • 说明:当有新任务提交时,如果当前运行的线程少于 corePoolSize,则创建新线程来处理任务。
  1. maximumPoolSize(最大线程数)
  • 功能:线程池允许创建的最大线程数。
  • 说明:当有新任务提交时,如果当前运行的线程数达到 corePoolSize 并且队列已满,则创建新线程来处理任务,直到达到 maximumPoolSize。
  1. keepAliveTime(线程空闲保持时间)
  • 功能:当线程池中的线程数超过 corePoolSize 时,多余的空闲线程的存活时间。
  • 说明:超过这个时间的空闲线程会被终止和移出线程池。
  1. unit(时间单位)
  • 功能:用于指定 keepAliveTime 参数的时间单位。
  • 说明:可以是 TimeUnit 枚举中的常量,如 TimeUnit.SECONDSTimeUnit.MILLISECONDS 等。
  1. workQueue(任务队列)
  • 功能:用于存储等待执行的任务的队列。
  • 说明:可以选择不同类型的队列,如 LinkedBlockingQueueSynchronousQueueArrayBlockingQueue 等。不同的队列类型会影响线程池的行为。
  1. threadFactory(线程工厂)
  • 功能:用于创建新线程的工厂。
  • 说明:可以自定义线程的创建,如设置线程名称、是否为守护线程等。
  1. handler(拒绝策略)
  • 功能:当任务无法提交到线程池时处理任务的策略。
  • 说明:可以选择内置的拒绝策略,如 AbortPolicyCallerRunsPolicyDiscardPolicyDiscardOldestPolicy,也可以实现 RejectedExecutionHandler 接口来自定义拒绝策略。

下面这张图可以加深你对线程池中各个参数的相互关系的理解

image.png