【问题标题】:SpringBoot @RequestMapping & handle threadSpringBoot @RequestMapping & 处理线程
【发布时间】: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


    【解决方案1】:

    如果我只使用一个 Chrome 选项卡,访问一次并刷新四次,它的行为与我预期的一样。所以可能是 Chrome 的优化:让同一个请求一个接一个地出现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      • 2017-09-30
      • 2016-06-25
      相关资源
      最近更新 更多