spring bean单例和并发
来源:互联网 发布:墨西哥美洲角球数据 编辑:程序博客网 时间:2024/06/06 02:04
spring中的bean默认都是单例的,如下所示,效果都是一样:
<bean name="" class=""/>
<bean name="" class="" scope="singleton"/>
<bean name="" class="" singleton="true"/>
所以我们的controller,service都是单例的,这些一般都是属于我们应用中的业务对象,spring的单例不会影响到应用的并发访问,这些业务对象没有做线程的并发限制,因此在使用这些业务对象的时候,一定要声明一些成员变量(即将变量放到方法中),如果不放在方法中,而是声明成成员变量,就会出现并发问题,尤其对于可变的状态变量,例如:
声明成员变量如下:int i=0;
在方法中有对i进行修改的地方,这个时候,多线程访问就会出现并发问题,所以不要在业务对象中声明状态可变化的成员变量。
那么spring是怎么解决非线程安全的呢?例如,对于事物管理transactionSynchronizationManager这种
spring是通过ThradLocal来处理的,ThradLocal相当于一个成员变量,是线程安全的成员变量,每一个线程都保存一份,具体,可以查看ThradLocal的源码,说的很清楚,另外通过ThreadLocal比synchronized效率高,ThreadLocal是以空间换时间,synchronized是以时间换空间。
最后谈谈spring的单例跟java的单例的区别:
spring的单例是对于IOC容器来说的。
java的单例是针对整个JVM来说的,ClassLoader内的都共享此实例。
- spring bean单例和并发
- Spring单例Bean和线程安全
- Spring单例Bean和线程安全
- spring创建单例bean和非单例bean的方式
- Spring单例Bean
- Spring单例Bean注入非单例Bean
- Spring Bean 单例模式
- Spring bean单例模式
- Spring创建单例bean
- Spring-5 bean的作用范围---单例和原型
- Spring 单例模式状态Bean
- Spring是如何缓存单例bean
- Spring缓存中获取单例bean
- 011. Spring Bean单例与非单例
- [ Spring Boot ] Bean 单例注入
- Spring学习笔记 关于Spring创建Bean的模式-Singleton(单例模式)和Prototype
- Spring学习笔记 关于Spring创建Bean的模式-Singleton(单例模式)和Prototype
- 1.spring bean的作用域(是否单例):bean
- 实习期间遇到的问题
- SQL:NVL函数
- session_unset()和session_destroy()用法分析
- JavaScript运动框架
- VMware WorkStation的三种网络连接方式
- spring bean单例和并发
- 转 ofbiz权限判断语法整理
- 扩栈语句
- thinkphp 表单提交生成数据库 用户 密码 赋权限 更改密码
- 杭电题目分类
- 有意思的12道C面试题及答案
- 形象解释“同步”、“异步”、“并发”的区别
- SVN使用中的经验浅谈
- SQL存在一个表而不在另一个表中的数据