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