性能文章>线程池线程何时减少>

线程池线程何时减少原创

2年前
606719

以下源码来自于jdk8

一、当没有获取到任务,则会减少工作线程
二、获取任务时,线程池中线程数减少条件:
1、线程池状态为stop
2、线程池状态为shutdown,且任务队列为空
3、当允许核心线程超时或工作线程数大于核心线程数时,并且获取任务超时,只要工作线程数大于1,或者任务队列为空,就能减少工作线程数(并发情况下,只会有一个能修改成功)

备注:
1、当允许核心线程超时或工作线程数大于核心线程数时,获取任务是超时等待,否则是阻塞等待。
2、ThreadPoolExecutor中getTask()方法源码
image.png


3、线程池状态变更图
image.png


注意点:
1、decrementWorkerCount和compareAndDecrementWorkerCount的区别
decrementWorkerCount:减少一个工作线程
compareAndDecrementWorkerCount:减少一个工作线程,若是并发,则只会有一个修改成功


欢迎各位批评指正,共同学习进步^_^😊

点赞收藏
青叶竹
请先登录,查看1条精彩评论吧
快去登录吧,你将获得
  • 浏览更多精彩评论
  • 和开发者讨论交流,共同进步

为你推荐

完了完了!线上发生 OOM 了!

完了完了!线上发生 OOM 了!

设计模式开发实践(外观、策略、代理)

设计模式开发实践(外观、策略、代理)

Java代码是如何被CPU狂飙起来的?

Java代码是如何被CPU狂飙起来的?

我试图通过这篇文章,教会你一种阅读源码的方式。

我试图通过这篇文章,教会你一种阅读源码的方式。

图解并发包中锁的通用实现

图解并发包中锁的通用实现

调优 mybatis saveBatch 25倍性能

调优 mybatis saveBatch 25倍性能

9
1