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

线程池线程何时减少原创

1年前
568906

以下源码来自于jdk8

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

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


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


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


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

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

为你推荐

【全网首发】(大表小技巧)有时候 2 小时的 SQL 操作,可能只要 1 分钟

【全网首发】(大表小技巧)有时候 2 小时的 SQL 操作,可能只要 1 分钟

一次java内存top res高排查记录

一次java内存top res高排查记录

JAVA中计算两个日期时间的差值竟然也有这么多门道

JAVA中计算两个日期时间的差值竟然也有这么多门道

干货!Java代码优化必知的30个小技巧!

干货!Java代码优化必知的30个小技巧!

Java 异步调用原理与实战

Java 异步调用原理与实战

没有二十年功力,写不出Thread.sleep(0)这一行“看似无用”的代码!

没有二十年功力,写不出Thread.sleep(0)这一行“看似无用”的代码!

6
0