1.struts 1
struts1 本身是线程安全的,这是因为我们在Action中使用的基本都是局部变量,而“局部变量是线程安全的。因为每执行一个方法,都会在独立的空间创建局部变量,它不是共享的资源。所有的变量都是定义在Action中我们要执行的方法里的(Action中的execute方法或DispatchAction中指定要执行的方法),我们用于封装客户端请求参数的ActionForm,也是作为一个参数传入,也属于局部变量,因此,不存在线程安全问题。但如果在action中定义全局变量,多个线程共享这个全局变量(共享资源),这时就线程不安全了。 解决方案:1不要定义全局变量2使用synchronized
2.struts 2
struts2 默认是不安全的,因为是实例多线程。又有全局变量。 但在配置文件中设置scope="prototype"(原型模式)这是每次请求会新生成一个action实例。就成了多实例多线程,Struts2框架在处理每一个用户请求的时候,都建立一个单独的线程进行处理,值栈ValueStack也是伴随着局部线程而存在的。在该线程存在过程中,可以随意访问值栈,这就保证了值栈的安全性,这样每个实例单独起来,所以线程安全了。