打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Session 和SessonFactory 的多线程问题
  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当中去了
    

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
框架面试题目
ThreadLocal常见的几种实现方式和实例
Struts2的简单使用(四)action向页面传值
Struts中ActionContext和ServletActionContext的比较
Struts2?页面数据处理
Java面试题集
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服