隨筆 - 37  文章 - 29  trackbacks - 0


          常用鏈接

          留言簿(3)

          隨筆分類(lèi)

          隨筆檔案

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          java.lang.ThreadLocal
          網(wǎng)上介紹ThreadLocal的文章也比較多。簡(jiǎn)單地說(shuō),ThreadLocal就是給多線程使用的,存放全局變量的一個(gè)變量池。可以簡(jiǎn)單地理解為,ThreadLocal維護(hù)了一個(gè)Map,這個(gè)Map的key就是每個(gè)線程,value就是要存放的變量。所以,每個(gè)Thread只是使用和維護(hù)了它自己存放進(jìn)去的那個(gè)變量,并不會(huì)和其他線程共享一個(gè)變量。(當(dāng)然,你如果讓多個(gè)線程存進(jìn)同一個(gè)變量引用,那就是你自己的事了)
          當(dāng)然,實(shí)際ThreadLocal的實(shí)現(xiàn)沒(méi)有這么簡(jiǎn)單。我只看到了WebSphere JRE里的實(shí)現(xiàn),它里面的map(類(lèi)似map)的key就是一個(gè)關(guān)聯(lián)了當(dāng)前Thread的ThreadLocal變量。Sun的JRE里實(shí)現(xiàn)也應(yīng)該大同小異吧。
          需要注意的是:當(dāng)我們使用線程池維護(hù)線程的時(shí)候,一個(gè)線程是可以被多次使用的。當(dāng)某個(gè)線程在運(yùn)行過(guò)程中拋出Exception卻沒(méi)有恢復(fù)在ThreadLocal中對(duì)應(yīng)的變量對(duì)象。而當(dāng)該線程在以后又一次被使用時(shí),也沒(méi)有很好地判斷和初始化該變量,就有可能會(huì)出現(xiàn)一些問(wèn)題。在使用了ThreadLocal的地方,都使用finally來(lái)處理善后工作。這些只是提醒我自己,因?yàn)槟壳绊?xiàng)目中就遇到了這樣的問(wèn)題


          posted on 2009-02-18 16:28 EvanLiu 閱讀(705) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): Java基礎(chǔ)

          FeedBack:
          # re: ThreadLocal學(xué)習(xí) 2009-03-04 23:12 gouflv
          ThreadLocal的文章小弟這是第一次看到...

          之前學(xué)hibernate的時(shí)候, myeclipse自動(dòng)生成的SessionFactory里也看到這個(gè)方法, 呵 學(xué)習(xí)學(xué)習(xí)  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 蒲江县| 苏尼特右旗| 临西县| 贵港市| 吉安县| 那曲县| 浮梁县| 遵义市| 安平县| 双城市| 南川市| 思南县| 永修县| 宁夏| 自贡市| 东安县| 来安县| 大连市| 米泉市| 汤阴县| 五常市| 墨江| 莱西市| 苏尼特右旗| 纳雍县| 五台县| 岳普湖县| 新郑市| 景谷| 同江市| 兖州市| 施秉县| 崇礼县| 泰宁县| 盐津县| 宜宾市| 德令哈市| 北川| 正安县| 白河县| 万山特区|