问题描述
我在struts2权威指南中看到介绍struts1与struts2的区别的时候说struts1是线程安全的。网上又有许多人说struts1是非线程安全的!我这个地方有底迷糊了,请高手来说一下,struts1和struts2到底是线程安全的还是非线程安全的,麻烦说下各位大虾是怎么分析的。谢谢
解决方案
解决方案二:
Struts2的Action设计就不像Struts1的Action或者Servlet那样是单实例了。Struts2的Action的设计哲学是每次请求来了,都创建一个实例了。因此,其Action中可以拥有成员变量。而Struts1Action或者Servlet都是单实例的,因此在他们当中使用成员变量的话就会产生线程安全问题。若将Struts2的Action交给Spring管理,就需要Spring配置时需要配置成prototype模式,否则Spring默认会是单实例的。如果是单实例的话,那Action中的成员变量就成为多线程共享变量了,会产生不正确的结果。
转自火龙果大大的回答.原帖链接
解决方案三:
该回复于2011-02-15 10:27:52被版主删除
解决方案四:
1楼说的正确
解决方案五:
struts1实际上就是Servlet的封装,而Servlet在web容器中都是单例,自然当多线程请求访问时,相应变量就可能被占用、共享。struts2是居于webwork设计的,采用拦截的方式push数据,具体更多的可上网了解
时间: 2024-08-06 17:14:04