struts2下多个人同时访问一个单例action的问题
如果我的Action是用Spring托管的,那么默认他是单例的。这应该是对的吧。也就是在内存里只有一个实例,是吧。单例模式下是线程不安全的,对吧。在这种情况下,如果有两个...
如果我的Action是用Spring托管的,那么默认他是单例的。这应该是对的吧。
也就是在内存里只有一个实例,是吧。
单例模式下是线程不安全的,对吧。
在这种情况下,如果有两个用户同时访问同一个Action,比如A用户带着用户名:张三,B用户带着用户名:李四。这是不是属于多线程?会不会出现写入或者读取错误的情况?为什么,谢谢
如果会出现错误,吧Action设置为原型模式,action中有Service对象,也是受Spring托管的,那么是不是就会出现多个Action访问一个Service对象的情况,这样岂不是又要出现数据存取错误的情况。
这样一层层下去,岂不是都要设置成原型模式? 展开
也就是在内存里只有一个实例,是吧。
单例模式下是线程不安全的,对吧。
在这种情况下,如果有两个用户同时访问同一个Action,比如A用户带着用户名:张三,B用户带着用户名:李四。这是不是属于多线程?会不会出现写入或者读取错误的情况?为什么,谢谢
如果会出现错误,吧Action设置为原型模式,action中有Service对象,也是受Spring托管的,那么是不是就会出现多个Action访问一个Service对象的情况,这样岂不是又要出现数据存取错误的情况。
这样一层层下去,岂不是都要设置成原型模式? 展开
2个回答
展开全部
没太明白你的意思,但是我简单说明一下,struts会为每一个请求开启一个线程的,所以你说的问题根本不存在,当然假如会有线程不安全的情况,你的问题还是可以避免,比如不要声明全局变量,那么就不会出现问题, 你可以简单的去看看关于内存分配的相关内容
追问
因为struts会为每一个请求开启一个线程,多个线程访问同一份action对象,那么单例下的action是线程不安全的,而在开发中一般都会定义几个全局变量的。
这样理论上应该出现问题才对啊,我上一个线程读的这个用户的信息,会被另一个用户的线程读取到。
实践中貌似很少出现这样的问题,struts或者spring是不是有什么机制避免的?
追答
明白你的意思了,首先说你是一个很爱探究问题的。
答案很明确,是不会出现问题的,并且spring的单例确实存在线程安全的问题。但是spring是如何避免的呢,答案是他用了threadlocal这个类,这个类的实现也很简单,百度一下或者去看看java的书籍就明白啦,祝你好运
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询