Spring中Bean是线程安全的吗
Spring对Bean没有做什么加锁之类的操作,所以它不是线程安全的
-
如果创建Bean的时候,作用域设置为prototype,那么每次获取Bean都会新建一个Bean实例
- 作用域设置为prototype的时候,
Bean绝对是安全的
- 作用域设置为prototype的时候,
-
其他时候就不一定了,比如单例的作用域的时候,多个线程同时获取的Bean本就是共享的,本就是不安全的
-
如果要Bean保证线程安全的问题,就把作用域设置为prototype
@Component @Scope(value = "prototype") public class AOPTest{}
-
这也跟Bean的状态有一点关,如果Bean是⽆状态的,那么Bean则是线程安全的
- 如果我们不对Bean中的成员变量进行修改,不会对成员变量进行任何的改动
- 那别说Bean对象,任何对象是这种⽆状态的,线程都是安全的
- 因为多线程不会改动到任何共享的数据
所以如果我们有一份数据不用局部变量保存,而是用类成员变量保存,就要
考虑线程安全
的问题了
- 如果继续用单例Bean,操作成员变量的时候就要考虑同步加锁的问题了