Session是非线程安全的,生命周期比较短,代表和数据库,在B/S系统一般不会超过一个请求, 内部维护一级缓存和数据库连接,如果session开启的时间过长,会长时间占用缓存和数据库连接池 SessionFactory是线程安全的,一个线程在使用的话其他线程必须得等待 String,Interger等不能修改的类,也是线程安全的,String的substring会产生一个新的对象,原来的对象时不会变的; 即每一个线程自己用自己的对象,不会出现数据混乱的情况; 另外一种只读的类也是线程安全的,假设有个JavaBean只提供了getXX方法,没有setXX大家都只会读,不会修改数据,也是线程安全的类 大家知道servlet,filter,包括扩struts1里面的Action,都是单例模式的,即web容器启动之后这些类只会创建一个对象,但每来一个请求Web容器就创建一个线程,然后呢把这写对象传给它让它去处理,这样就会有多个线程同时去访问一个实例的问题,这个时候在一个实例里面就不能够定义这种即能读又能写的属性;假如struts1里面的Action里面定义一个变量来记录这个Action被使用了多少次 即:class MyAction Extends Action
{
private int count;
public String execute()
{
count++;
}
}
会出现多线程并发的问题,包括我们用的servlet,Filter,都存在这种问题,在他们里面都不能定义这种即可读又可写的属性,但我们可以定义成 可读的,假如说上面的count 改为:final 类型的,程序中只用它,不修改它这样的程序是不会存在问题的:class MyAction Extends Action{
private final int count;
public String execute()
{
int b=count;
}
}
在struts2里面Action是多实例的,每来一个请求web容器就创建一个线程,但是会给每一个线程创建一个对象 所以在struts2的Action里面可以定义很多的成员变量,(其实回忆一下使用struts2时,我们没有了FormBean而是把所有的属性都放在了Action当中去了
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。