作为一个 Java 后端开发实习生,我最近在学习高并发、Tomcat 线程池和 JVM 的线程模型。
发现很多人都在说“线程池最大200线程”、“4核8线程CPU”、“Java线程能开上千个”……但这些数字之间到底什么关系?

今天这篇文章,我们就从 Spring 内嵌 Tomcat → 操作系统线程 → CPU 实际核心 一路讲通。
最后还加个我个人最喜欢的一款CPU ——  AMD 9800X3D


🧩 一、Spring Boot 内嵌 Tomcat:每个请求 = 一个线程

在 Spring Boot 中,每次 HTTP 请求都会被交给 Tomcat 的线程池 处理。
Tomcat 不会为每个请求都新建线程,而是使用一个 线程池(ThreadPoolExecutor) 来复用线程。

Tomcat 的默认配置如下👇:

参数名 含义 默认值
maxThreads 最大工作线程数 200
minSpareThreads 启动时创建的核心线程数 10
acceptCount 等待队列长度 100

👉 也就是说,最多 200 个请求能被同时处理
再多的请求会被放进等待队列,队列满了就拒绝(返回 503)。

application.properties 里我们可以手动调整:

server.tomcat.max-threads=300
server.tomcat.accept-count=100

⚙️ 二、Tomcat 线程 ≠ CPU 实际能并行的线程

当请求很多时,你可能会看到 Tomcat 开了 200 个线程。
但要注意⚠️:

CPU 并不会同时执行这 200 个线程。

因为系统中能“真正同时执行”的线程数,取决于 CPU 核心数逻辑线程数


🧠 三、CPU 核心数与线程数:物理核心 ≠ 逻辑线程

概念 解释
物理核心(Core) CPU 实际存在的计算核心
逻辑线程(Logical Processor) 由超线程技术(Hyper-Threading)模拟出来的执行单元

例如:

4核8线程 = 每个核心支持两个逻辑线程。

操作系统(Linux / Windows)会把这 8 个逻辑线程当作 8 个“可并行执行单元”,
所以 Java 的 Runtime.getRuntime().availableProcessors() 通常返回 8。


🔩 四、Java 线程的“并发假象”:并不是都在干活!

假设你创建了 200 个 Java 线程。
实际上:

  • CPU(8线程)同时只能让 8 个线程真正执行;

  • 其他 192 个线程都在 等待轮到自己

  • 操作系统调度器会在纳秒级频率切换时间片;

  • 所以你看到 200 个线程“都在跑”,
    其实是 CPU 在疯狂切换执行,让每个线程轮流获得一点点执行时间。

这就是并发(Concurrency),而非并行(Parallelism)


🏭 五、用通俗比喻记住它

CPU 是“8个灶台”,
Java线程是“200个厨师”。

同一时刻只能8个人炒菜,
但厨房管理员(操作系统调度器)每隔几毫秒换一拨人上去炒。

看起来200个人都在干活,其实只有8个人在同时炒菜。


💡 六、为什么线程池能开到几百上千?

因为大多数 Web 请求是 IO 密集型任务

  • 线程在调用数据库或远程接口时,大部分时间在“等待响应”;

  • 这时它并不占用 CPU;

  • CPU 可以切换去执行其他线程;

  • 所以线程数可以远大于 CPU 核心数,而系统依然高效。

如果是 CPU 密集型任务(如大规模计算、压缩、加密),
那线程数就要接近 CPU 核心数,否则切换开销会拖慢性能。


⚙️ 七、线程数调优经验值

场景类型 CPU核数 建议线程池最大线程数
CPU密集型 4核8线程 8~16
IO密集型 4核8线程 200~400
超高并发系统 8核16线程 500+(需压测)

🧠 八、一句话总结

CPU线程数决定“同时干活的人数”;
Java线程数决定“等待排队的人数”;
Tomcat线程池是用来调度这些线程高效轮换上CPU干活的中间层。


🎁 九、我与 AMD 的故事


我一直挺喜欢 AMD的,之前花15在淘宝买了个980的钥匙扣,后来去bw参与他们活动,抽奖送了我一颗。当时那个活动知道的人很少啊,而且amd也没一个单独的展台,只和微星七彩虹那几家合作,要不是关注amd的b站官号,知道这事的人可能更少。最后参与活动的就仨人,当时在7月17在东京玩着呢,amd给我私信说我中了,哈哈哈哈哈哈哈哈哈哈
 

顺便也聊聊这款 CPU 的参数:

型号 核心数 线程数 特色
Ryzen 7 9800X3D 8 核 16 线程 3D V-Cache 缓存加持,游戏性能极强

它的 8核16线程 说明支持超线程(每个核心可运行2个线程),
这类高性能 CPU 在服务器上也常见,比如 AMD EPYC 系列(64核128线程),
是高并发后端系统的“线程池战士”。


✅ 最后总结

层级 概念 控制谁
CPU 物理核心 & 逻辑线程 决定同时执行的上限
操作系统 线程调度器 负责分配时间片
JVM Java线程 & 线程池 请求调度与执行逻辑
Spring Boot 内嵌Tomcat 分配请求 → 线程池执行

希望你读完这篇文章后,对“线程池”、“CPU线程”、“并发与并行”有一个更直观的认识。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐