线程池主要参数有哪些?

线程池有七个重要参数,其中需要重点关注的是 corePoolSizemaximumPoolSizeworkQueuehandler

corePoolSize(核心线程数)

该值用于初始化线程池中的核心线程数。当线程池中的线程数小于 corePoolSize 时,系统默认是在添加一个任务后才创建一个线程。当线程数等于 corePoolSize 时,新任务会被追加到 workQueue 中。

maximumPoolSize(最大线程数)

maximumPoolSize 表示允许的最大线程数,其值为非核心线程数加上核心线程数。当线程池中的任务队列(workQueue)已满,且线程池中的总线程数小于 maximumPoolSize 时,会创建新的线程来处理任务。

keepAliveTime(线程空闲时间)

对于非核心线程来说,即 maximumPoolSize 减去 corePoolSize 的数量,当这些线程空闲一段时间后,它们将被回收。

unit(时间单位)

该参数用于定义非核心线程空闲时间的单位,可以选择的单位包括:

  • TimeUnit.DAYS:天
  • TimeUnit.HOURS:小时
  • TimeUnit.MINUTES:分钟
  • TimeUnit.SECONDS:秒
  • TimeUnit.MILLISECONDS:毫秒
  • TimeUnit.MICROSECONDS:微秒
  • TimeUnit.NANOSECONDS:纳秒

workQueue(任务队列)

workQueue 是线程池中维护等待执行的 Runnable 对象的队列。当运行的线程数等于 corePoolSize 时,新的任务会被添加到 workQueue 中。如果 workQueue 也已满,则尝试使用非核心线程来执行任务。建议使用有界的等待队列。

threadFactory(线程工厂)

用于创建新线程的工厂,可用于设置线程的名称、是否为守护线程等。

handler(饱和策略)

当线程池的 corePoolSizeworkQueuemaximumPoolSize 都无法处理新任务时,会执行定义的饱和策略(handler)来处理。

标签: java, Java面试题, Java问题合集, Java编程, Java问题精选, Java常见问题