本文转载于http://blog.csdn.net/yuhua3272004/archive/2009/03/31/4037671.aspx
struts是线程安全,并不是指多线程,而是指单态,当多个用户访问一个请求的时候,服务器内存中只有一个与之对应的action类对象,execute方法加上了同步关键字,如果你在action里加上一个全局变量,那么,多个客户访问的时候,这个变量是共有的,即一个客户修改了他,下一个客户获得的变量是修改后的,你可以写个demo来测试,至于多线程只是服务器在相应客户端请求时对于session的处理,并不是指struts action
Spring的MVC model类似于Struts。在多线程服务对象这点上,Spring的Controller类似于Struts Action,只有一个实例处理所有客户请求。
以上两点在今天才知道,惭愧啊。
如果在一个struts的Action或spring的Controller中使用了一个全局变量(类成员变量的话),当不同用户访问同一个action时,就会发生错误! 因为如上所述,服务器内存只有一个action类对象。恐怖啊!
唉,之前以为多线程的话就会在服务器为每个线程创建一个action对象呢~!!!! 狂晕
另外,本人在用spring做项目的时候也出现了类似的问题,我在MultiActionController中定义了一个全局的Page(分页算法的封装),导致了所有的用户都共用一个page对象,以致产生分页的页数出现混乱。
也就是说Spring的Controller不是多线程安全,Spring的Controller是singleton的.每个request过来,系统会用原有的instance处理,由于只有一个Controller的instance,当多个线程调用它的时候,它里面的instance变量不是线程安全的。