线程池常见参数有哪些?如何解释?
在Java中,线程池是通过 java.util.concurrent
包中的 ThreadPoolExecutor
类来实现的。创建线程池时可以指定多个参数来控制线程池的行为和性能。以下是 ThreadPoolExecutor
的主要参数及其功能:
核心参数
- corePoolSize(核心线程数)
- 功能:线程池中始终保持的最小线程数,即使这些线程处于空闲状态。
- 说明:当有新任务提交时,如果当前运行的线程少于 corePoolSize,则创建新线程来处理任务。
- maximumPoolSize(最大线程数)
- 功能:线程池允许创建的最大线程数。
- 说明:当有新任务提交时,如果当前运行的线程数达到 corePoolSize 并且队列已满,则创建新线程来处理任务,直到达到 maximumPoolSize。
- keepAliveTime(线程空闲保持时间)
- 功能:当线程池中的线程数超过 corePoolSize 时,多余的空闲线程的存活时间。
- 说明:超过这个时间的空闲线程会被终止和移出线程池。
- unit(时间单位)
- 功能:用于指定 keepAliveTime 参数的时间单位。
- 说明:可以是
TimeUnit
枚举中的常量,如TimeUnit.SECONDS
、TimeUnit.MILLISECONDS
等。
- workQueue(任务队列)
- 功能:用于存储等待执行的任务的队列。
- 说明:可以选择不同类型的队列,如
LinkedBlockingQueue
、SynchronousQueue
、ArrayBlockingQueue
等。不同的队列类型会影响线程池的行为。
- threadFactory(线程工厂)
- 功能:用于创建新线程的工厂。
- 说明:可以自定义线程的创建,如设置线程名称、是否为守护线程等。
- handler(拒绝策略)
- 功能:当任务无法提交到线程池时处理任务的策略。
- 说明:可以选择内置的拒绝策略,如
AbortPolicy
、CallerRunsPolicy
、DiscardPolicy
、DiscardOldestPolicy
,也可以实现RejectedExecutionHandler
接口来自定义拒绝策略。
下面这张图可以加深你对线程池中各个参数的相互关系的理解
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Elmer的博客!