FixedThreadPool空闲时会消耗CPU资源吗?

发布于 2022-09-12 23:54:19 字数 185 浏览 18 评论 0

ava FixedThreadPool 当空闲的时候会释放掉线程吗?如果不会,哪个线程池是既可以限定大小,又可以自动释放资源的?
https://www.oschina.net/quest...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

与酒说心事 2022-09-19 23:54:19

newFixed不会释放,你看他的参数:

ExecutorService newFixedThreadPool(int nThreads) {
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>());
    }

corePoolSizemaximumPoolSize相等,所以无法“扩容”,更不能释放了。

线程池的释放,或者叫“缩容”,是指从maximumPoolSize 缩容到 corePoolSize

哪个线程池是既可以限定大小,又可以自动释放资源的?

Executors 接口没提供这个选项,但你可以自己 new :

return new ThreadPoolExecutor(20, 40,
                                      60L, TimeUnit.MILLISECONDS,
                                      new SynchronousQueue<Runnable>());

解释下参数:核心20,即最小会释放到20,最大40,达到40后如果空闲会按60L的最大空闲时间释放空闲线程。

附一张线程池核心流程图

image.png

路还长,别太狂 2022-09-19 23:54:19

不会
自己 new 线程池,coreSize0 就可以了
比如下面这样,就是最小0,最大100的线程池,线程空闲30秒就会释放

new ThreadPoolExecutor(0, 100, 30, TimeUnit.SECONDS, new LinkedBlockingQueue<>());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文