struts2下多个人同时访问一个单例action的问题

如果我的Action是用Spring托管的,那么默认他是单例的。这应该是对的吧。也就是在内存里只有一个实例,是吧。单例模式下是线程不安全的,对吧。在这种情况下,如果有两个... 如果我的Action是用Spring托管的,那么默认他是单例的。这应该是对的吧。
也就是在内存里只有一个实例,是吧。
单例模式下是线程不安全的,对吧。
在这种情况下,如果有两个用户同时访问同一个Action,比如A用户带着用户名:张三,B用户带着用户名:李四。这是不是属于多线程?会不会出现写入或者读取错误的情况?为什么,谢谢

如果会出现错误,吧Action设置为原型模式,action中有Service对象,也是受Spring托管的,那么是不是就会出现多个Action访问一个Service对象的情况,这样岂不是又要出现数据存取错误的情况。
这样一层层下去,岂不是都要设置成原型模式?
展开
 我来答
初代复读机
2013-12-13 · 超过13用户采纳过TA的回答
知道答主
回答量:36
采纳率:0%
帮助的人:34.9万
展开全部
这个问题我建议你去看看JAVA并发编程实战这本书,里面有对servlet的并发运行原理有比较清楚的讲述,同理也可得出action中的service对象为何不会出现数据存储的错误,大体意思就是每一个用户发出一次请求后就有一个独立的线程与之绑定,且有一个对应的servlet实例,你在其之上做的操作只属于当前servlet实例,不会受其他servlet实例的影响,反之也不会影响其他线程的servlet实例。
百度网友60ba0a5
2013-12-10 · TA获得超过231个赞
知道小有建树答主
回答量:544
采纳率:100%
帮助的人:211万
展开全部
没太明白你的意思,但是我简单说明一下,struts会为每一个请求开启一个线程的,所以你说的问题根本不存在,当然假如会有线程不安全的情况,你的问题还是可以避免,比如不要声明全局变量,那么就不会出现问题, 你可以简单的去看看关于内存分配的相关内容
追问
因为struts会为每一个请求开启一个线程,多个线程访问同一份action对象,那么单例下的action是线程不安全的,而在开发中一般都会定义几个全局变量的。
这样理论上应该出现问题才对啊,我上一个线程读的这个用户的信息,会被另一个用户的线程读取到。
实践中貌似很少出现这样的问题,struts或者spring是不是有什么机制避免的?
追答
明白你的意思了,首先说你是一个很爱探究问题的。
答案很明确,是不会出现问题的,并且spring的单例确实存在线程安全的问题。但是spring是如何避免的呢,答案是他用了threadlocal这个类,这个类的实现也很简单,百度一下或者去看看java的书籍就明白啦,祝你好运
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式