spring中的实例变量导致多线程环境中的问题

时间:2014-12-03 03:41:39

标签: java spring

我有一个spring bean让我们说BeanA和范围默认是通过构造函数注入的。我有实例变量c,我没有使用它,它在method1和method2中使用。注意C没有注入。但是在多线程环境中我因为变量C而面临问题。由于我的unserstand默认范围是单身,所以这应该有用吗?问题就像不同用户同时尝试访问bean一样他们正在获得陈旧的c实例例如让用户1实例化c = hello .user 2看到同样的问题。我想了解实例变量的行为如果不是注入并用于不同的方法?

class BeanA{
private A a,
private B b;
private C c;

public BeanA( A a, B b){

this.a=a;
this.b=b;
}

public method1(){
 c= //assignSomething
}

public method2(){
 c= //assignSomethingElse
}

}

1 个答案:

答案 0 :(得分:1)

由于您只有一个Bean A实例,所有用户将共享同一个对象。这将导致所有线程只使用一个变量C.因此,线程之间共享C的值。这是预期的行为。

它与弹簧注射无关。它的基础是java语言本身。如果您需要不同的BeanA实例,那么您需要根据需要定义其范围以请求(如果是webapplicaton)或原型。

如果你陈述你想要实现的目标,那将是非常有帮助的。

相关问题