我通过网络询问了这个问题,但无法清楚地了解这个问题。
String someVariable;
@RequestMapping(value = "/home",method = RequestMethod.GET)
public String home(Model model)
{
MyClass ob = new MyClass();
// using 'someVariable'
int r = ob.method1();
//.........
//........
return "something"
}
我的类(class)
public class MyClass{
int i=0;
public int method1(){
// some operations on i
return i;
}
}
这个 Spring MVC 在多用户环境中可以正常工作吗? MyClass
在多用户环境中线程安全吗?
我只是想让我的 Spring MVC 应用程序能够正常工作以进行多用户访问。我可以简单了解一下吗?
最佳答案
MyClass
不是线程安全的。但它在 Controller 中的使用方式是线程安全的。当您在 home
方法中创建了 MyClass
的实例时:
public String home(Model model)
{
MyClass ob = new MyClass();
// using 'someVariable'
int r = ob.method1();
//.........
//........
return "something"
}
每个执行线程都会获得一个单独的MyClass
实例。因此,一个应用程序线程对其自己的 MyClass
实例所做的更改不会影响其他应用程序线程可用的其他实例。
但是,如果您使用 Spring Controller 的默认范围,则使用 someVariable
将不是线程安全的。默认范围是单例范围。这样,您的 Controller 将只有一个实例可用,并且相同的 someVariable
将可用于所有应用程序线程。因此,不建议在 Controller 中使用可变实例变量。即使 String
是不可变的,如果一个用户为其设置了新值,则其他用户也可以使用相同的值,因为只有一个 someVariable
可用。
关于 Spring MVC : Making multi user friendly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20190630/