posts - 22,comments - 35,trackbacks - 0
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(4)

          我參與的團隊

          隨筆分類(25)

          文章分類(148)

          收藏夾(6)

          我的連接

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          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 閱讀(581) 評論(0)  編輯  收藏 所屬分類: Hibernate
          主站蜘蛛池模板: 长治县| 湖南省| 宜章县| 邮箱| 鄂托克旗| 西丰县| 岗巴县| 九江市| 容城县| 营山县| 延安市| 昔阳县| 拉萨市| 桦南县| 河源市| 博爱县| 威宁| 中牟县| 连平县| 蒲江县| 三江| 扎赉特旗| 文安县| 长治市| 满城县| 理塘县| 老河口市| 建宁县| 潍坊市| 鸡东县| 九江县| 禄劝| 上林县| 鄂伦春自治旗| 稷山县| 遵义市| 天峻县| 南城县| 延川县| 泾源县| 敦煌市|