动态更改Threadpool的大小

时间:2015-07-28 21:10:31

标签: java multithreading java-8

我在fixedThreadPool中调用了10个线程的外部API。现在我想动态减少这个线程数,因为API主机无法处理10个线程中的那些请求。我想将线程数减少到5.我希望在没有应用程序重启的情况下执行此操作,即 我想动态更改为固定大小的线程池的大小。我可以在ThreadPoolExecutor上调用setCorePoolSize(int)和setMaximumPoolSize(int)。然而,javadoc说:

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

所以当他们说: “多余的现有线程将在下一次变为空闲时终止” ,当多余的现有线程将变为空闲时?如果我的任务队列总是满的,这些多余的现有线程是否可以空闲?

1 个答案:

答案 0 :(得分:5)

  

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

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

  

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

当他们没有执行一段时间的任务时(默认为一分钟)

  

如果我的任务队列总是满的,这些多余的现有线程是否可以空闲?

没有。它取决于线程池的设置,即线程何时退役,但默认值为1分钟。