线程池主要参数有哪些?

线程池主要参数有哪些?
线程池有七个重要参数,其中需要重点关注的是 corePoolSize
、maximumPoolSize
、workQueue
和 handler
。
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(饱和策略)
当线程池的 corePoolSize
、workQueue
和 maximumPoolSize
都无法处理新任务时,会执行定义的饱和策略(handler
)来处理。