【发布时间】:2020-09-22 18:17:02
【问题描述】:
我正在本地测试一个 Spring Boot 控制器,我注意到一些让我感到惊讶的行为。我写了这个示例控制器方法:
@GetMapping()
public void test() throws InterruptedException {
for(int i = 0; i < 5 ; i++) {
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
我几乎同时从不同的选项卡调用了端点两次。我期待看到来自两个线程的日志输出重叠(因为我认为每个请求都会创建一个新的执行线程)。同时,我得到的输出是:
http-nio-8080-exec-1 0
http-nio-8080-exec-1 1
http-nio-8080-exec-1 2
http-nio-8080-exec-1 3
http-nio-8080-exec-1 4
http-nio-8080-exec-1 0
http-nio-8080-exec-1 1
http-nio-8080-exec-1 2
http-nio-8080-exec-1 3
http-nio-8080-exec-1 4
这看起来只有一个线程,第二个请求实际上等待第一个完成。我认为tomcat默认的最大线程值为200。有人可以向我解释这种行为吗?为什么没有创建多个线程?
这是一个空白项目,由 Spring Initializer 创建,只有 Spring Boot Starter Web 作为依赖项
【问题讨论】:
标签: java spring multithreading spring-boot