SpringBoot应用中Tomcat线程池与自定义线程池总最大线程数疑问
关于内置Tomcat+自定义线程池的应用总最大线程数问题解答
直接给出结论:你的应用总最大线程数远不止210,200+10只是你明确感知到的两类业务线程的最大上限,而非JVM进程的总线程数上限,具体原因如下:
- 你提到的200是内置Tomcat处理HTTP请求的工作线程池的最大数值,自定义的10线程是你业务侧异步任务线程池的最大数值,二者相加仅对应你业务侧可控核心线程的最大并发数。
- Spring Boot应用启动后,默认还会存在大量非业务控制的常驻线程:
- JVM底层自带线程:包括GC回收线程(数量随CPU核心数变动,4核机器默认就有至少6~10个GC相关线程)、JIT即时编译线程、Finalizer引用处理线程、监听类线程等。
- Spring框架自带线程:如果开启了
@Async默认线程池、@Scheduled定时任务线程池、Actuator监控端点线程池,或是引入了Spring Cloud类组件,还会额外存在配置中心心跳、服务注册探活等专项线程。 - 第三方组件自带线程:数据库连接池的后台存活检测线程、日志框架异步打印线程、Redis/MQ等中间件客户端的网络IO线程、消费线程等,都属于额外创建的线程,不会计入你提到的200和10的统计范围内。
如果你原本想问的是「HTTP请求处理线程加自定义异步业务线程的最大并发数是否为210」,在你没有修改Tomcat线程池配置、自定义线程池确实是固定10核心且最大线程数等于核心数的前提下,这个数值是成立的,但它不等于应用的总最大线程数。
内容的提问来源于stack exchange,提问作者J.J. Beam
相关产品推荐
相关产品推荐

