H5W3
当前位置:H5W3 > 其他技术问题 > 正文

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

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

回答:

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

回答:

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

new ThreadPoolExecutor(0, 100, 30, TimeUnit.SECONDS, new LinkedBlockingQueue<>());

本文地址:H5W3 » FixedThreadPool空闲时会消耗CPU资源吗?

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址