首先你要理解线程安全性产生的原因。如果一个类A,对每一个线程是一个单独的实例,这样是不会产生线程安全性问题的。因为每个线程的实例不同,即使实例产生了变化,别的线程也是看不到的。
MVC模式下线程安全性产生的原因,多数MVC开源框架,在Action层是单实例的。这才是问题的根本。
为什么要用局部变量?这样可以把一个类设计成不变类。不变类没有状态,或者说状态不可变,绝对线程安全。
至于Business层是否有线程安全问题,看你是怎样调用的了,如果每个线程或访问都是new一个对象,那就没问题了。如果也是使用一个共同的对象,那也要设计成不变类。

解决方案 »

  1.   

    对啊,不过这只是可以保证action的线程安全,action调用的bean的线程安全又是另外一回事了.即使action使用了实例变量,也是可以通过折中的办法达到线程安全的.比如这样,public class MyAction {
      private HttpServletRequest request;  public ActionForward execute(..){
        return new MyAction().handleRequest(...);
      }  public ActionForward handleRequest(..){
        .........
      }}
      

  2.   

    多谢steven_cheng和Saro的指教,前一阵出差,未能及时回复.
    看了steven_cheng的讲解,终于有了确定的答案.我想以后还会多多留意这方面的,多多学习.