SpringBoot--为什么Controller是串行的?怎样才能并行?

原文网址:SpringBoot--为什么Controller是串行的?怎样才能并行?-CSDN博客

简介

本文介绍SpringBoot为什么Controller是串行的?在什么场景下才能并行执行?

大家都知道,SpringBoot的Controller按理是并行执行的,也就是说:如果一个请求没执行完,另一个请求就进入了,那么第二个请求也会立刻执行,与第一个请求并行。但事实真的是这样吗

问题描述

对于下边的Controller,如果一个请求没执行完,另一个请求就进入了,会输出什么结果?

java 复制代码
package com.knife.example.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@Api(tags = "测试")
@RestController
public class TestController {

    @ApiOperation("测试1")
    @GetMapping("test1")
    public String test1(String username) {
        System.out.println("方法进入。线程名:" + Thread.currentThread().getName());

        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

        System.out.println("方法退出。线程名:" + Thread.currentThread().getName());

        return "success";
    }
}

为了方便,我这里用的是knife4j(swagger的升级版)。

请求方式:打开两个页面,传参一样。先在第一个页面请求,第一个页面还没返回时,快速在第二个页面请求。

后端的打印结果:

java 复制代码
方法进入。线程名:http-nio-8080-exec-7
方法退出。线程名:http-nio-8080-exec-7
方法进入。线程名:http-nio-8080-exec-8
方法退出。线程名:http-nio-8080-exec-8

什么?竟然是串行的!第一个请求完全退出之后,第二个请求才进来,这是为什么!

原因排查

上边是部分内容,为便于维护,全文已转移到此网址:SpringBoot-为什么Controller是串行的?怎样才能并行? - 自学精灵

相关推荐
带刺的坐椅2 天前
SpringBoot3 使用 SolonMCP 开发 MCP
java·ai·springboot·solon·mcp
LUCIAZZZ3 天前
JVM之虚拟机运行
java·jvm·spring·操作系统·springboot
堕落年代3 天前
SpringSecurity当中的CSRF防范详解
前端·springboot·csrf
一零贰肆3 天前
深入理解SpringBoot中的SpringCache缓存技术
java·springboot·springcache·缓存技术
LUCIAZZZ5 天前
JVM之内存管理(一)
java·jvm·spring·操作系统·springboot
LUCIAZZZ6 天前
JVM之内存管理(二)
java·jvm·后端·spring·操作系统·springboot
天上掉下来个程小白7 天前
缓存套餐-01.Spring Cache入门案例
java·redis·spring·缓存·springboot·springcache
程序员buddha9 天前
SpringBoot+Dubbo+Zookeeper实现分布式系统步骤
分布式·zookeeper·dubbo·springboot
天上掉下来个程小白9 天前
缓存套餐-03.功能测试
redis·缓存·springboot·苍穹外卖·springcache
Ten peaches10 天前
苍穹外卖(订单状态定时处理、来单提醒和客户催单)
java·数据库·sql·springboot