posts - 22,comments - 35,trackbacks - 0

          Java中ThreadLocal的設計和使用:http://www.huawei.org.cn/news/article_show.asp?id=27413

          Hibernate中的ThreadLocal 轉載地址:http://blog.blogchina.com/refer.393753.html

          Hibernate的文檔時看到了關于使ThreadLocal管理多線程訪問的部分。具體代碼如下

          1.  public static final ThreadLocal session = new ThreadLocal();
          2.  public static Session currentSession() {
          3.      Session s = (Session)session.get();
          4.      //open a new session,if this session has none
          5.   if(s == null){
          6.      s = sessionFactory.openSession();
          7.      session.set(s);
          8.   }
                return s;
          9. }

          我們逐行分析
          1。 初始化一個ThreadLocal對象,ThreadLocal有三個成員方法 get()、set()、initialvalue()。
              如果不初始化initialvalue,則initialvalue返回null。
          3。session的get根據當前線程返回其對應的線程內部變量,也就是我們需要的net.sf.hibernate.Session(相當于對應每個數據庫連接).多線程情況下共享數據庫鏈接是不安全的。ThreadLocal保證了每個線程都有自己的s(數據庫連接)。
          5。如果是該線程初次訪問,自然,s(數據庫連接)會是null,接著創建一個Session,具體就是行6。
          6。創建一個數據庫連接實例 s
          7。保存該數據庫連接s到ThreadLocal中。
          8。如果當前線程已經訪問過數據庫了,則從session中get()就可以獲取該線程上次獲取過的連接實例。

          通過ThreadLocal,我們既實現了多線程并發,同時,也實現了SingleTon模式。一舉兩得。

          posted on 2006-01-17 23:35 kelven 閱讀(587) 評論(0)  編輯  收藏 所屬分類: Hibernate
          主站蜘蛛池模板: 赤城县| 南丹县| 甘泉县| 黑山县| 平潭县| 康平县| 洛南县| 齐齐哈尔市| 龙游县| 开江县| 子洲县| 萝北县| 平江县| 平塘县| 永寿县| 永宁县| 棋牌| 奇台县| 永胜县| 禹州市| 仁化县| 福建省| 商水县| 阳原县| 绥德县| 龙州县| 柳江县| 乌兰察布市| 出国| 元谋县| 东明县| 阿荣旗| 三穗县| 化德县| 淮阳县| 信宜市| 如东县| 平远县| 腾冲县| 汉沽区| 望都县|