一、spring mvc 工作流程图
    2、spring mvc 单例 - 图1
    二、spring mvc 默认模式
    1、Springmvc默认是单例模式
    优点:
    (1)、为了性能。这个不用废话了,单例不用每次都new,当然快了
    (2)、不需要多例。不需要实例会让很多人迷惑,因为spring mvc官方也没明确说不可以多例。
    我这里说不需要的原因是看开发者怎么用了,如果你给controller中定义很多的属性,那么单例肯定会出现竞争访问了
    2、spring boot 默认线程配置
    2、spring mvc 单例 - 图2
    3、最佳实践
    (1)、不要在controller中定义成员变量。
    (2)、万一必须要定义一个非静态成员变量时候,则通过注解@Scope(“prototype”),将其设置为多例模式
    https://www.cnblogs.com/maohuidong/p/7837688.html
    https://www.jianshu.com/p/0443268f5b6a
    三、问题
    controller、service、dao 默认都是单例
    struts2 的action 多例
    1、单例消耗cpu、多例消耗内存??
    2、用户并发访问,java contorller是多个线程还是单个线程在执行?
    (1)、一个请求进入controller,创建一个线程?
    package com.wolf.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;@Controller@RequestMapping(“/thread”)public class ThreadControllerTest { @RequestMapping(“/reqTest”) @ResponseBody public String getThreadName() { String name = Thread.currentThread().getName(); System.out.println(“请求thread Name” + name); return name; }}
    测试结果
    2、spring mvc 单例 - 图3
    默认1个新的请求创建1个新的线程,spring boot 默认有10个线程
    3、请求数 == 线程数??
    每个新请求,都创建一个新线程或从连接池中分配一个线程去执行
    2、spring mvc 单例 - 图4
    1W个请求,1w个线程,每个请求创建一个线程?
    4、sprin mvc单例 如何支持多并发?
    2、spring mvc 单例 - 图5
    5、java的服务是每收到一个请求就新开一个线程来处理吗?tomcat呢?
    https://blog.csdn.net/h12kjgj/article/details/55063956
    6、高并发下选取什么样的线程池会比较合理
    高并发,低耗时
    建议少线程,只要满足并发即可;例如并发100,线程池可能设置为10就可以。如果线程太多,有可能出现线程切换和管理的时间,大于任务执行的时间,那效率就低了。
    低并发,高耗时
    建议多线程,保证有空闲线程,接受新的任务;例如并发10,线程池可能就要设置为20;
    高并发,高耗时
    要分析任务类型,增加排队,加大线程数