Springboot多线程机制相关思考:
假设一个项目的目录结构如下:
springboot-project/
├── src
│ ├── main
│ │ ├── java
│ │ │ ├── com
│ │ │ │ ├── example
│ │ │ │ │ ├── Application.java
│ │ │ │ │ ├── busi
│ │ │ │ │ │ ├── Temp.java

其中Temp为我写的业务逻辑,用于处理word的文档段落,我原本在Temp中使用了java自带的多线程,用于批量处理一些业务,
现在有个问题摆在我的面前:
如果我该为使用springboot的多线程有哪些好处,为什么,有这个必要吗?
首先springboot的多线程,项目运行时,会自动创建固定数量的线程,整个程序复用这些线程.
你会发现一个问题:当你用apache jmeter对springboot项目进行并发测试时,10个并发几乎是同时完成的,为什么?
因为中间件Tomcat在项目创建时也会创建出大量的线程,用来处理springboot项目的并发场景,常见的Tomcat默认配置如下:

最大工作线程数,默认200。
server.tomcat.max-threads=200
 
最大连接数默认是10000
server.tomcat.max-connections=10000
 
等待队列长度,默认100。
server.tomcat.accept-count=100
 
最小工作空闲线程数,默认10。
server.tomcat.min-spare-threads=100

这说明什么?说明如果大量并发访问我的服务时,一个请求,用了一个Tomcat的线程,去调用我的Temp.java,这时我的Temp.java又会再创建Max_Thread个线程(我自己设置的Max_Thread=30),那么在面对高并发场景时,一定会造成资源紧张,严重的甚至可能会卡死,10个并发的访问,就是10x30个线程,以此类推.
这时如果我们使用springboot的注解来实现多线程,整个程序总共能生成的线程数在一开始就被规定好,就不会出现上述高并发模式下创建大量线程,造成资源紧张的问题.


奇天大郑
70 声望10 粉丝