1线程池的七大参数以及他们之间是怎么工作的?

简介: 1线程池的七大参数以及他们之间是怎么工作的?

1.corePoolSize(核心线程数):创建线程池后不会立即创建核心线程,当有任务到达时才触发核心线程的创建;核心线程会一直存活,即使没有任务需要执行;当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理。(设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时摧毁)
2.maximumPoolSize(最大线程数):当线程数>=corePoolSize且任务队列已满时线程池会创建新线程来处理任务;当线程数=maximumPoolSize,且任务队列已满时,线程池会根据配置的拒绝策略处理任务。
3.keepAliveTime(多余的空闲线程的存活时间):当线程空闲时间达到keepAliveTime时,线程会摧毁,直到线程数量=corePoolSize。(如果allowCoreThreadTimeout=true,则会直到线程数量=0)
4.unit(keepAliveTime的计量单位)
TimeUnit.DAYS;               //天
TimeUnit.HOURS;             //小时
TimeUnit.MINUTES;           //分钟
TimeUnit.SECONDS;           //秒
TimeUnit.MILLISECONDS;      //毫秒
TimeUnit.MICROSECONDS;      //微妙
TimeUnit.NANOSECONDS;       //纳秒
5.workQueue (任务队列):新任务被提交且核心线程数满后,会进入到此工作队列中,任务调度从队列中取出任务
6.threadFactory(创建一个新线程时使用的工厂,可以用来设定线程名、是否为daemon线程等)
7.handler (拒绝策略):所有拒绝策略实现RejectedExecutionHandler接口,读者可根据实际情况扩展该接口实现自己的拒绝策略 。
handler的四大拒绝策略:当线程池的任务缓存队列已满并且线程池中的线程数目达到maximumPoolSize时,如果还有任务到来就会采取任务拒绝策略,通常有以下四种策略:
ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。 (线程池中默认的拒绝策略。)
ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。 默默丢弃
ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的等待时间最久的任务,然后重新尝试执行任务(重复此过程)
ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务,谁调用返回给谁

相关文章
|
1月前
|
Java 数据库连接 调度
面试题:用过线程池吗?如何自定义线程池?线程池的参数?
字节跳动面试题:用过线程池吗?如何自定义线程池?线程池的参数?
38 0
|
1月前
|
监控 Java 数据库
深入探讨线程池及其关键参数
深入探讨线程池及其关键参数
|
1月前
|
Java 调度
多线程之线程池的七个参数
多线程之线程池的七个参数
87 0
|
1月前
|
Dubbo 安全 Java
ThreadPoolExecutor线程池参数及其设置规则
ThreadPoolExecutor线程池参数及其设置规则
25 1
|
1月前
|
Java
Java线程池ThreadPoolExcutor源码解读详解01-参数说明
`ThreadPoolExecutor`是Java中用于创建线程池的类,其构造函数包含核心线程数`corePoolSize`、最大线程数`maximumPoolSize`、空闲线程存活时间`keepAliveTime`、时间单位`unit`、工作队列`workQueue`、线程工厂`threadFactory`和拒绝策略`handler`等参数。`corePoolSize`是始终保持的线程数,除非设置`allowCoreThreadTimeOut`。当线程数超过核心线程数时,新任务会放入工作队列,直到队列满且线程数未达到`maximumPoolSize`,才会创建新线程处理。
46 0
|
10月前
|
存储 缓存 Java
Java线程池-当任务渐增时的处理-各个参数的含义
Java线程池-当任务渐增时的处理-各个参数的含义
53 0
|
1月前
|
存储 Java
【经典问题】创建线程池的参数,拒绝策略有哪些?
【1月更文挑战第26天】【经典问题】创建线程池的参数,拒绝策略有哪些?
|
1月前
|
Java
面试题:线程池参数 工作流程
面试题:线程池参数 工作流程
41 0
|
1月前
|
Java
线程池的核心参数
线程池的核心参数
|
1月前
|
Java
通过生活案例快速 Get 线程池七个参数和工作原理
通过生活案例快速 Get 线程池七个参数和工作原理
67 0

热门文章

最新文章