Spring批量多线程: throttle-limit impact

标签 spring multithreading spring-batch

我有一个多线程步骤,配置了一个 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/

相关文章:

java - 如何添加线程 MVC 模式 theView 以避免 JFrame 卡住

multithreading - 使用互锁增量来增量STL映射的value字段。它是线程安全的吗?

java - JdbcBatchItemWriter 多线程

spring - 由 : java. io.FileNotFoundException : class path resource [application. properties] 导致无法打开,因为它不存在

java - 使用 spring 集成 IMAP 适配器,如何手动获取标记为 "unread"的电子邮件?

c++ - Boost Asio延迟写入tcp套接字

java - Spring Hibernate MySQL- 50k 插入耗时 20 分钟

java - 如何使用 CommandLineJobRunner 调用嵌入在 Spring Boot 应用程序中的 Spring Batch 作业

java - 使用 LocalDateTime 的“AttributeConverter 和显式类型不能应用于同一属性”

json - 如何测试 Spring Boot Controller 的错误输出?