ThreadPoolExecutor线程大于corePoolsize的多出线程是咋产生的( 四 )
在向线程池提交任务时,如果核心线程已满、队列已满且线程池最大线程数未满时,就会创建出题主所说的“大于corePoolsize的多出线程”。
这里通过源代码来说明下(jdk1.8.0_101):
线程池的execute方法实现:
再来说说keepAliveTime,这个参数是用来控制,超出corePoolSize的线程在这个时间还没有可执行的任务时,则自动退出(线程销毁)
口说无凭,还是源代码来验证:
上边说到了调用addWorker创建线程,这里看看addWorker方法
【ThreadPoolExecutor线程大于corePoolsize的多出线程是咋产生的】
线程启动后就会调用Worker对象的run方法:
runWoker方法就是线程从队列里拿任务开始干活,如果等了keepAliveTime还没有任务并且线程数大于coreSizePoll,则线程就会执行完毕退出。
接下来再看看getTask方法,这里就是判断keepAliveTime的关键了
到这里,题主应该能明白什么时候创建线程,线程什么时候退出了。
推荐阅读
- 豪车|玛莎拉蒂推出限量版新车,噱头大于实际意义
- 将ipad应用于课堂是利大于弊还是弊大于利
- 汽车知识|形式大于内容,长安CS75百万版上市,中期改款主要是换壳
- 现在很多都是无限流量了iPhone大于150MB的app不能下载,有没有大佬有啥好的办法解决
- 这些体检项目 套路大于实效,慎做!
- 多线程编程中join这个单词为啥有等待结束的意思
- 钟南山|钟南山:人的寿命应该大于100岁!他的5句话,每个人都该听听
- 车之养护|都知道7座车噱头大于实际,那为什么不考虑买6座呢?
- 怎样理解servlet单例引起的线程安全问题
- 使用无锁队列还是线程同步锁?
