spring容器中的bean是否线程安全

spring容器中的线程是否安全,容器本身并没有提供Bean的线程安全策略,因此可以说spring容器中的bean本身并不具备安全的特性,但是具体还是要结合具体scope的bean去研究。
spring的bean作用域(Scope)类型:
1.singleton:单例,默认作用域。
2.prototype:原型,每次创建一个新对象。
3.request:请求,每次http请求创建一个新对象,适合与webApplicationContext环境下。
4.session:会话,同一个会话共享一个实例,不同会话使用不同实例。
5.global-session:全局会话,所有会话共享一个实例。
线程安全这个问题,要从单例与原型bean分别进行说明:
原型Bean:
每次创建一个新对象,也就是线程之间并不存在bean共享,自然是不会有线程安全问题。

单例bean:
对于单例bean,所有线程都共享一个单例实例bean,因此存在资源的竞争。
如果单例bean,是一个无状态的bean,也就是线程中操作不会对bean的成员执行查询以外的操作。那么这个单例是线程全区的。比如Spring mvc 的Controller,Serverce,Dao等,这些bean 大多是无状态的,只关注方法本身。
如何保证线程安全?Spring中默认是单例模式的,框架中并没有对bean进行多线程的封装处理。实际上bean大部分时间是无状态的(比如dao),所以说某种程度上来说bean其实是线程安全的。
但如果bean是有状态的,那就需要开发人员自己来进行线程安全的保证,最简单的办法就是改变作用域singleTon改为prototype这样每次请求bean就相当于是new Bean() 这样就可以保证线程的安全了。

-有状态就是有数据存储功能
-无状态就是不会保存数据

controller、service和dao本身并不是线程安全的,如果只是调用里面的方法,而且多线程调用一个实例的方法,会在内存中复制变量,这是自己的线程的工作内存,是安全的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值