关于Spring的Controller及Struts的Action的多线程的注意(转载)

  本文转载于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变量不是线程安全的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值