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

Java spring中的实例变量导致多线程环境中出现问题,java,spring,Java,Spring,我有一个SpringBean,让我们说BeanA和作用域是通过构造函数默认注入的。我有一个实例变量c,我没有使用它,在method1和method2中使用它。请注意,c没有被注入。但在多线程环境中,由于变量c,我面临问题。因为我不支持默认作用域是单例的,所以这应该有效吗?问题是,当不同的用户试图访问bean的同时,他们正在获得过时的c实例,例如,让用户1实例化c=hello。用户2看到的是相同的hello。我想了解如果不注入实例变量并在不同的方法中使用,实例变量的行为如何 class BeanA

我有一个SpringBean,让我们说BeanA和作用域是通过构造函数默认注入的。我有一个实例变量c,我没有使用它,在method1和method2中使用它。请注意,c没有被注入。但在多线程环境中,由于变量c,我面临问题。因为我不支持默认作用域是单例的,所以这应该有效吗?问题是,当不同的用户试图访问bean的同时,他们正在获得过时的c实例,例如,让用户1实例化c=hello。用户2看到的是相同的hello。我想了解如果不注入实例变量并在不同的方法中使用,实例变量的行为如何

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
}

}

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

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


如果你能说出你想要实现的目标,这将非常有帮助。

什么问题?我不清楚你的情况是什么,什么问题?它仍然含糊不清。很抱歉,这是个意外。你为什么认为单身会有帮助?听起来你需要复习一下背景知识。这个问题的措辞并不能比“它正在做它应该做的事情,你需要弄清楚为什么这不是你想要的”更有效,听起来你需要为这两种方法添加同步关键字。否则,可能会发生竞争条件。Singleton不能保证线程安全。请注意,只有当您请求Spring上下文提供bean时,将作用域设置为prototype才有效。我见过很多代码,作者认为原型赋予了一些奇迹般的行为,解决了所有的线程问题!