一、spring mvc 工作流程图
二、spring mvc 默认模式
1、Springmvc默认是单例模式
优点:
(1)、为了性能。这个不用废话了,单例不用每次都new,当然快了
(2)、不需要多例。不需要实例会让很多人迷惑,因为spring mvc官方也没明确说不可以多例。
我这里说不需要的原因是看开发者怎么用了,如果你给controller中定义很多的属性,那么单例肯定会出现竞争访问了
2、spring boot 默认线程配置
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; }}
测试结果
默认1个新的请求创建1个新的线程,spring boot 默认有10个线程
3、请求数 == 线程数??
每个新请求,都创建一个新线程或从连接池中分配一个线程去执行
1W个请求,1w个线程,每个请求创建一个线程?
4、sprin mvc单例 如何支持多并发?
5、java的服务是每收到一个请求就新开一个线程来处理吗?tomcat呢?
https://blog.csdn.net/h12kjgj/article/details/55063956
6、高并发下选取什么样的线程池会比较合理
高并发,低耗时
建议少线程,只要满足并发即可;例如并发100,线程池可能设置为10就可以。如果线程太多,有可能出现线程切换和管理的时间,大于任务执行的时间,那效率就低了。
低并发,高耗时
建议多线程,保证有空闲线程,接受新的任务;例如并发10,线程池可能就要设置为20;
高并发,高耗时
要分析任务类型,增加排队,加大线程数
