《strut2权威指南》中有这么一段:
线程模式方面的对比:Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能做的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的;Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题 。由于对设计模式不太了解,做了这么之年Struts,一直不知道struts1是单例模式,不知这一点是从哪体现出来的?
而在开发过程中要怎样注意“线程安全或同步”?struts2从哪体现的“没有线程安全问题”?

解决方案 »

  1.   

    这里讲的安不安全都应是指的action
    我的理解就是注意一下所谓的类变量
      

  2.   

    如果书上说的是对的,那么当Action有成员变量时,在struct1中,两个不同的请求实际操作的是同一套变量,这样就可能产生问题。
      

  3.   

    struts1里面的processActionCreate()方法是关于Action创建的楼主可以去源代码里查看这个方法的内容
      

  4.   

    楼主可以去看源码,struts1在读取配置文件的时候,对于你写的action,生成的都是单例,每次客户端访问到来的时候,服务器为请求分配一个个线程,就是说有了很多的饿请求线程,但是当我们的几个线程去找你的特定Action的时候,你的Action是单例(在服务器上只存在一个实例),这些线程要‘同时’被你的一个action处理,这时就是线程不安全的,所以你在写你的action的时候,要注意线程安全的问题。没有用过struts2,看过一些书,上面说对于每个请求线程struts2都会生成一个新的action,因此它是线程安全的。在下愚见,请高手指点。
      

  5.   

    struts2本身就是多实例单线程的,所以可以说 本身就是线程安全的。
    struts1则是单实例多线程的,所以必须要注意线程的安全性。
     所以相对来说,struts1 要多使用局部变量,而struts2使用 实例变量则不会产生不安全的结果。