理解springMVC的controller

controller默认是单例模式,所有线程使用同一个对象,当controller类中没有定义类变量,或存在常量时,是线程安全的。
使用单例模式的优点:
提高访问速度,单例只有一个对象,不用每次都new
当不在controller中定义类变量时,单例是完全够用的。
存在类变量不是线程安全的原因
当定义一个类变量s时,在此时他是所有线程所共享的变量,线程a对其进行了修改,线程b对其操作时,会直接获得到线程a修改后的变量s,这样s在线程间重复修改,不是安全状态。
解决非线程安全
1.可以在controller类上添加注释@Scope(“prototype”);将其改为多例模式。
2.对类变量进行ThreadLocal(线程本地存储处理)。。。不实际。

servlet的单实例多线程模型。
servlet只有在启动时调用一次init()方法,只是初始化了一次,产生了一个实例对象。所以其是单例模式。其优点与controller差不多

ps:spring对每一个request(对应controller中的方法)都进行了ThreadLocal处理,使得每个请求都是独立的线程,保证线程安全。
关于ThreadLocal
看这个:http://blog.csdn.net/wangpei555/article/details/61418132

具体源码待补。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值