Sag*_*gar 1 java multithreading java-8
我在fixedThreadPool中调用了10个线程的外部API.现在我想动态减少这个线程数,因为API主机无法处理10个线程中的那些请求.我想将线程数减少到5.我想在没有应用程序重启的情况下执行此操作,即我想动态更改为固定大小的线程池的大小.我可以在ThreadPoolExecutor上调用setCorePoolSize(int)和setMaximumPoolSize(int).然而,javadoc说:
设置核心线程数.这将覆盖构造函数中设置的任何值.如果新值小于当前值,则当下一个空闲时,多余的现有线程将被终止.如果需要更大,则新线程将启动以执行任何排队任务.
因此,当他们说:"当他们下一次变为空闲时,将会终止多余的现有线程",当多余的现有线程将变为空闲时?如果我的任务队列总是满的,这些多余的现有线程是否可以空闲?
现在我想动态减少这个线程数,因为API主机无法处理10个线程中的那些请求.
在这种情况下,我建议从一开始就将线程数设置为5.如果你不能这样做,你可以将每个任务包装在一个信号量中,这样你就可以限制并发任务的数量.
当多余的现有线程将变为空闲?
当他们没有执行一段时间的任务时(默认为一分钟)
如果我的任务队列总是满的,这些多余的现有线程是否可以空闲?
没有.它取决于线程池的设置,以确定线程何时退役,但默认值为1分钟.
| 归档时间: |
|
| 查看次数: |
647 次 |
| 最近记录: |