1.struts1的Action是线程不安全的
struts1的Action类是单例模式,存在线程安全问题,应该避免呢?
因为所有针对同一个Action的请求只有一个Action对象处理,即struts用同一个execute()方法来处理多个URI的请求。因此尽量不要使用成员变量(或者使用synchronized进行同步)。在execution方法中使用局部变量是最简单的保证线程安全的方法了。也就是说在使用struts1的action时,不要在类中定义属性。
还有一种方法,采用ThreadLocal,将定义的成员变量放入ThreadLocal中,一般定义成private static的:
private static ThreadLocal<Integer> local = new ThreadLocal<Integer>();
用的时候,当需要获得成员变量的时候,先使用local对象的get方法
Integer inte = local.get(),
如果得到的是不是null,那么就返回get的值,如果是null,那么new一个成员变量,
然后调用local的set方法,当前线程以后再get的时候就不再是null了。
1.struts1的Form Bean是线程安全的
每次请求都会产生一个新的Form Bean,不会出现多个线程共用一个Form Bean的情况,可任意定义读写的属性。