0
点赞
收藏
分享

微信扫一扫

关于Spring框架中的单例bean的线程安全问题

山竹山竹px 2022-05-03 阅读 78

Spring框架中的单例bean是线程安全的吗

     不是线程安全的,当多用户同时请求一个服务时,容器会给每一个请求分配一个线程,这是多个线程会并发执行该请求多对应的业务逻辑(成员方法),此时就要注意了,如果该处理逻辑中有对该单列状态的修改(体现为该单例的成员属性),则必须考虑线程同步问题。Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要开发者自行去搞定。但实际上,大部分的Spring bean并没有可变的状态(比如Service类和DAO类),所以在某种程度上说Spring的单例bean是线程安全的。如果你的bean有多种状态的话(比如 View Model对象),就需要自行保证线程安全。最浅显的解决办法就是将多中状态的bean的作用域由singleton变更为prototype。
Spring Bean的作用域:
1、singleton :这种bean范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个bean的实例,单例的模式由bean factory自身来维护 。
2、prototype :原形范围与单例范围相反,为每一个bean请求提供一个实例 。
3、request :在请求bean范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后, bean会失效并被垃圾回收器回收 。
4、Session:与请求范围类似,确保每个session中有一个 bean 的实例,在session过期后, bean会随之失效 。

举报

相关推荐

0 条评论