Java线程池参数详解(7大核心参数)

Java线程池参数详解(7大核心参数)-mikechen

Java多线程编程常用到线程池,这就会涉及到Java线程池参数,本篇详解Java线程池的七个参数@mikechen

Java线程池的参数是指在使用 ThreadPoolExecutor 创建线程池时所设置的 7 个参数,如下所示:

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue,
                          ThreadFactory threadFactory,
                          RejectedExecutionHandler handler) {
}

Java线程池的参数说明,如下所示:

Java线程池参数详解(7大核心参数)-mikechen

下面,我会详细的谈Java线程池的7大参数。

1.corePoolSize

核心线程数,表示线程池中的核心线程数的大小。

核心线程数是在线程池中始终存在的线程数量,当任务数量超过核心线程数时,线程池会根据其他参数来创建新的线程。

当线程池中的线程数小于核心线程数时,即使线程池中有空闲线程,也会创建新的核心线程。

 

2.maximumPoolSize

最大线程数,表示线程池中最大线程数的大小。

当线程池中的线程数达到最大线程数时,后续的任务将会被放入等待队列中等待处理。如果使用无界的任务队列,那么这个参数就没有实际意义。

 

3.keepAliveTime

非核心线程的空闲时间,表示线程池中非核心线程的空闲时间。

当这些线程在空闲时间内没有被使用时,它们将会被终止,这个参数表示非核心线程的空闲时间,单位为毫秒。

 

4.TimeUnit

当这些线程在空闲时间内没有被使用时,它们将会被终止。这个参数表示非核心线程的空闲时间,单位为毫秒。

 

5.workQueue

workQueue表示:任务队列,表示线程池中的任务队列。

任务队列可以是无界的,例如:LinkedBlockingQueue,或有界的,例如:ArrayBlockingQueue

如果任务队列是有界的,当任务数量超过队列的容量时,线程池会根据其他参数来创建新的线程。

 

6.ThreadFactory

创建线程工厂,用来创建线程。

线程池中的线程都是由线程工厂创建的。通过实现ThreadFactory接口来创建自定义的线程工厂。

 

7.RejectedExecutionHandler

常见的Java线程池拒绝策略有以下4种,如下图所示:

Java线程池参数详解(7大核心参数)-mikechen

1.AbortPolicy

默认的拒绝策略,当线程池已满时,直接抛出RejectedExecutionException异常,阻止系统继续执行。

 

2.CallerRunsPolicy

CallerRunsPolicy在任务被拒绝添加后,会用调用execute函数的上层线程去执行被拒绝的任务。

 

3.DiscardOldestPolicy

抛弃任务队列中等待时间最长的任务,并尝试重新提交当前被拒绝的任务。

DiscardOldestPolicy策略的作用是,当任务呗拒绝添加时,会抛弃任务队列中最旧的任务也就是最先加入队列的,再把这个新任务添加进去。

 

4.DiscardPolicy

直接抛弃被拒绝的任务,不做任何处理。

采用这个拒绝策略,会让被线程池拒绝的任务直接抛弃,不会抛弃也不会执行。

以上就是Java线程池参数详解,更多Java线程池,请查看:Java线程池原理详解(看这篇就够了)

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法