首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态更改线程池的大小

动态更改线程池的大小
EN

Stack Overflow用户
提问于 2015-07-28 21:10:30
回答 1查看 954关注 0票数 1

我正在用fixedThreadPool中的10个线程调用一个外部API。现在,我想动态地减少这个线程数,因为API主机无法在10个线程中处理这许多请求。我希望将线程数量减少到5,并且我想在不重新启动应用程序的情况下这样做,也就是说,我想动态地更改为固定大小的线程池的大小。我可以在我的setCorePoolSize(int)和setMaximumPoolSize(int)上调用ThreadPoolExecutor。然而,javadoc说:

设置线程的核心数目。这将重写构造函数中设置的任何值。如果新值小于当前值,则多余的现有线程将在下一个空闲时终止。如果较大,如果需要,将启动新线程来执行任何排队的任务。

因此,当他们说:“过剩的现有线程将在它们下一个空闲时被终止”时,当多余的现有线程变为空闲时?如果我的任务队列总是满的,这些多余的现有线程会变得空闲吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-28 21:28:57

现在,我想动态地减少这个线程数,因为API主机无法在10个线程中处理这许多请求。

在这种情况下,我建议从一开始就将线程数设置为5。如果不能这样做,可以将每个任务包装在一个信号量中,这样就可以限制并发任务的数量。

何时多余的现有线程将变为空闲?

当他们有一段时间没有执行任务时(默认情况下是一分钟)

如果我的任务队列总是满的,这些多余的现有线程会变得空闲吗?

不是的。它取决于线程池的设置,即线程何时退出,但默认情况是1分钟。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31687157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档