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大参数。
1.corePoolSize
核心线程数,表示线程池中的核心线程数的大小。
核心线程数是在线程池中始终存在的线程数量,当任务数量超过核心线程数时,线程池会根据其他参数来创建新的线程。
当线程池中的线程数小于核心线程数时,即使线程池中有空闲线程,也会创建新的核心线程。
2.maximumPoolSize
最大线程数,表示线程池中最大线程数的大小。
当线程池中的线程数达到最大线程数时,后续的任务将会被放入等待队列中等待处理。如果使用无界的任务队列,那么这个参数就没有实际意义。
3.keepAliveTime
非核心线程的空闲时间,表示线程池中非核心线程的空闲时间。
当这些线程在空闲时间内没有被使用时,它们将会被终止,这个参数表示非核心线程的空闲时间,单位为毫秒。
4.TimeUnit
当这些线程在空闲时间内没有被使用时,它们将会被终止。这个参数表示非核心线程的空闲时间,单位为毫秒。
5.workQueue
workQueue表示:任务队列,表示线程池中的任务队列。
任务队列可以是无界的,例如:LinkedBlockingQueue,或有界的,例如:ArrayBlockingQueue。
如果任务队列是有界的,当任务数量超过队列的容量时,线程池会根据其他参数来创建新的线程。
6.ThreadFactory
创建线程工厂,用来创建线程。
线程池中的线程都是由线程工厂创建的。通过实现ThreadFactory接口来创建自定义的线程工厂。
7.RejectedExecutionHandler
常见的Java线程池拒绝策略有以下4种,如下图所示:
1.AbortPolicy
默认的拒绝策略,当线程池已满时,直接抛出RejectedExecutionException异常,阻止系统继续执行。
2.CallerRunsPolicy
CallerRunsPolicy在任务被拒绝添加后,会用调用execute函数的上层线程去执行被拒绝的任务。
3.DiscardOldestPolicy
抛弃任务队列中等待时间最长的任务,并尝试重新提交当前被拒绝的任务。
DiscardOldestPolicy策略的作用是,当任务呗拒绝添加时,会抛弃任务队列中最旧的任务也就是最先加入队列的,再把这个新任务添加进去。
4.DiscardPolicy
直接抛弃被拒绝的任务,不做任何处理。
采用这个拒绝策略,会让被线程池拒绝的任务直接抛弃,不会抛弃也不会执行。
以上就是Java线程池参数详解,更多Java线程池,请查看:Java线程池原理详解(看这篇就够了)
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》