线程池的core线程数你真的会设了?
程序员文章站
2022-04-27 08:02:50
...
点击上方“JavaEdge”,关注公众号
设为“星标”,好文章不错过!
面试题
如果我们不小心每次都创建了这样一个自定义的线程池(10个core线程,50 max线程,2秒回收),反复执行测试接口线程,最终会被回收吗?如果不会,会出现什么问题?
讲解
不会被回收,且会发生OOM。
即使自定义线程池,core线程也不会回收,每次需要10个线程,刚好是core线程数,因此每次请求都会创建10个core线程数的线程池,请求次数多了后,很快就会OOM。
Exception in thread "main" java.lang.OutOfMemoryError:
unable to create new native thread
ThreadPoolExecutor 回收不了,因其工作线程 Worker 是内部类,只要它存活(即线程还在 run),就会阻止 ThreadPoolExecutor 回收,所以 ThreadPoolExecutor无法回收,不要自以为 ThreadPoolExecutor 没有引用就能回收。
往期推荐
目前交流群已有 800+人,旨在促进技术交流,可关注公众号添加笔者微信邀请进群
喜欢文章,点个“在看、点赞、分享”素质三连支持一下~
推荐阅读