Controller是单例还是多例

@RestController
@RequestMapping("single")
//@Scope("prototype")
public class ControllerSingle {

    private int i = 1;

    @GetMapping("thread1")
    public Integer thread1() {
	i++;
	return i;
    }

    @GetMapping("thread2")
    public Integer thread2() {
	i++;
	return i;
    }
}

思考

1.一个用户(一个线程),调用方法1,5次,返回什么,结论:6

2.两个线程,分别调用方法1和2,5次,返回什么,结论:11

3.把注释@Scope去掉,上面两次调用返回什么,结论:都是2

为什么:没有@Scope,controller是个单例,只有一个bean对象,成员变量i,属于这个对象,线程共享,所以每次调用,不管单线程还是多线程,每次取到的都是一个bean的属性,当然是累加

如果加上注解@Scope,每次调用都会创建一个bean,就是多例的,每次拿到的对象属性都是1,返回结果都是2

参考这个兄台

Controller 是单例还是多例?怎么保证并发的安全 - 踏步 - 博客园

思考:如果项目重启,bean销毁,单例,创建bean,属性i,起始就是1,从头开始累加

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值