SpringMVC是单例的,高并发情况下,如何保证性能的?

/ java / 没有评论 / 150浏览

解决方法:

  1. 不要定义成员变量。
  2. 万一必须要定义一个非静态成员变量时候,则通过注解@Scope(“prototype”),将其设置为多例模式。
@Controller
public class TestController {

    private Integer typeValue = 0;

    @RequestMapping("/setType/{type}")
    public void setType(@PathVariable("type") Integer type) {
         typeValue = type;
         for(int i = 0; i < 10000000; i++){
              test(type);
         }
    }

    public void test(Integer type) {
        System.out.println("当前:" + type + “,实际:” + typeValue);
    }

}

操作流程

  1. 先访问localhost:8080/setType/0

  2. 再访问localhost:8080/setType/1

正常情况应该是当前:0,实际:0或者当前:!,实际:1

但在高并发下回出现当前:0,实际:1或者当前:1,实际:0 alt