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 閱讀(580) 評論(0)  編輯  收藏 所屬分類: Hibernate
          主站蜘蛛池模板: 巴东县| 南开区| 湖州市| 大港区| 金川县| 满洲里市| 苏尼特右旗| 定边县| 四会市| 马鞍山市| 沁水县| 安多县| 新建县| 原平市| 东城区| 邮箱| 丰原市| 循化| 乐山市| 会理县| 绥滨县| 巴彦淖尔市| 华蓥市| 睢宁县| 淮安市| 九台市| 武陟县| 平山县| 于都县| 汉阴县| 英山县| 万山特区| 盐山县| 怀集县| 嵩明县| 壤塘县| 山东省| 思南县| 周口市| 左权县| 西丰县|