我有一个多线程步骤,配置了一个 corePoolSize 为 48 个线程的线程池(它是一台大机器),但我没有配置throttle-limit。
我想知道我是否因此而未能充分利用机器。
Spring Batch 文档表示,throttle-limit 是一次可以运行的并发任务的最大数量,默认值为 4。
我可以在 jconsole 中看到,实际上创建了 48 个线程,并且它们似乎正在执行(我也可以在日志中看到)。
但是,即使我可以看到创建的 48 个线程,限制为 4 是否意味着这 48 个线程中只有 4 个确实在并发执行工作?
提前谢谢您。
最佳答案
是的,您的理解是正确的,即只有等于限制限制的线程才能同时工作。
在您的情况下,由于它是一个线程池,因此可以随机选择任何四个线程来完成工作,其余线程将保持空闲状态,但由于线程会轮换执行这四个任务,因此会给人一种印象:所有线程正在同时做工作。
corePoolSize 只是指示作业运行期间要启动和维护的线程数,但这并不意味着所有线程都同时运行,这意味着您试图避免在作业运行期间创建线程等开销作业运行。
您尚未分享任何代码或工作结构,因此很难指出更多细节。
希望对你有帮助!!
关于Spring批量多线程: throttle-limit impact,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41871647/