今天看到有人发帖子问Action的问题,我想来说明一下。
虽然我也不能算精通,但是希望把我知道的和大家分享一下;
我没有用过Struts2,一直在用Struts。不知道是不是一样的。
对Struts,我可以很负责任的说,同一个Action只会实例化一次,所有请求共享一个Action。但是它不是线程安全的。这个有点难理解,不过事实就是如此。可以看官方文档,看一下对线程但是安全的说明。就像不同的线程中调用了同一个实例的方法(火车售票),如果共享数据而不进行同步的话就会出现-1和-2票。
数据安全的话,类变量和实例变量最好不要共享和特定请求相关的信息,这一点大家应该很清楚,以为Action里的实例变量和类变量都将被所有请求共享,但是可以用来共享一般的信息,比如说这个action的访问量,或者在这个action里进行某种操作的频率,共享时要注意同步(如果不同步就会出现火车售票问题中 -1,-2的问题 ,这就是线程不安全的 )。
另外,Spring管理Action的话,一般也是用默认的,也就是single。
希望对大家有帮助,如果又什么意见建议,欢迎提出来。