隨筆 - 37  文章 - 29  trackbacks - 0


          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          最新評(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(類似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 閱讀(710) 評(píng)論(1)  編輯  收藏 所屬分類: 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)論
            
          主站蜘蛛池模板: 石台县| 靖宇县| 万年县| 阿图什市| 闻喜县| 大方县| 灵武市| 建平县| 嵊泗县| 丹棱县| 马关县| 乐亭县| 肃南| 柯坪县| 武鸣县| 黔东| 璧山县| 云浮市| 交城县| 新和县| 修水县| 大同市| 九寨沟县| 新建县| 灵台县| 上杭县| 垫江县| 平乡县| 枝江市| 康定县| 泊头市| 宝清县| 大余县| 勐海县| 油尖旺区| 东丽区| 呼伦贝尔市| 博客| 出国| 格尔木市| 天全县|