【发布时间】:2021-02-10 06:41:41
【问题描述】:
我在spring boot中写了一个简单的@RequestMapping,没有任何额外的配置。每次访问只需睡 20 多岁。
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello() throws InterruptedException {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println(dtf.format(LocalDateTime.now()) + ": sleep begin");
Thread.sleep(20_000);
System.out.println(dtf.format(LocalDateTime.now()) + ": sleep end");
return "success";
}
}
在 Chrome 的五个选项卡中连续访问 http://localhost:8080/hello,我希望控制台日志如下:
sleep begin
sleep begin
sleep begin
sleep begin
sleep begin
sleep end
sleep end
sleep end
sleep end
sleep end
但实际上它显示:
2021-02-10 14:30:35: sleep begin
2021-02-10 14:30:55: sleep end
2021-02-10 14:30:55: sleep begin
2021-02-10 14:30:57: sleep begin
2021-02-10 14:30:59: sleep begin
2021-02-10 14:31:00: sleep begin
2021-02-10 14:31:15: sleep end
2021-02-10 14:31:17: sleep end
2021-02-10 14:31:19: sleep end
2021-02-10 14:31:20: sleep end
所以,我在想 SpringBoot 是如何处理 @RequestMapping 的,看来它既不是单线程也不是简单的多线程。
【问题讨论】:
标签: multithreading spring-boot request-mapping