石建 | Fat Mind

          ThreadLocal小理解


          題記:一直對ThreadLocal疑惑,聽完facebook大牛演講后,總結點東西。

          一、ThreadLocal的作用,整體結構

          二、源代碼簡單分析
            1.set方法
            2.get方法

          三、使用場景實例 ibatis SqlMapClientImp

          后記:折騰半天,文章的樣式也調整不好,打包上傳。但愿能幫到別人。
          http://www.aygfsteel.com/Files/shijian/ThreadLocal.rar [請用“web版式視圖”閱讀]


          遺留問題:

                1.ThreadThreadLocalMap threadLocals 屬性什么時候實例化 線程實例化時嗎
          答:第一次set時,會判斷是否為null,若為null,初始化。

          2.
          ThreadLocalMap replaceStaleEntry(key, value, i); 做了什么
          答:全清洗stale對象;存放當前對象在發現的第一個stale位置。因為Entry是繼承WeakRerfence,任何一次的垃圾收集,都會導致其引用的對象被回收。

          4.與Map方式的一些區別
          Map策略:a、相同hash&key,覆蓋value b、相同hashkey不同,當前元素做為單向鏈的第一個元素,原來第一個元素做為當前元素的下一個。
          ThreadLocalMap策略:a相同,是不存在b情況;以ThreadLocal作為keyThreadLocalthreadLocalHashCode由原子AtomicInteger計算getAndAdd(0x61c88647)得到;在Entry[]數組的位置,通過threadLocalHashCode & (length-1)計算;對于b情況,繼續查找Entry[]數組的下一個位置,是否可存放(key相同或null);當size>=threshold(len*2/3)做resize=oldLen*2. 


          3.
          ThreadLocalMap  getEntryAfterMiss(ThreadLocal key, int i, Entry e)
          答:作用,查找沒有存放在hash計算出index位置的元素。為什么出現此情況?見4,由ThreadLocalMap策略決定.

          posted on 2010-12-11 18:50 石建 | Fat Mind 閱讀(335) 評論(0)  編輯  收藏 所屬分類: 一點理解

          導航

          <2010年12月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          What 、How、Why,從細節中尋找不斷的成長點
          主站蜘蛛池模板: 三原县| 吉安市| 四平市| 乐平市| 余江县| 互助| 黔西县| 龙口市| 楚雄市| 苏尼特左旗| 河间市| 荣昌县| 忻州市| 灌阳县| 三亚市| 梁平县| 阳江市| 鄄城县| 淄博市| 安徽省| 上饶市| 景洪市| 阳江市| 鄂州市| 汤原县| 页游| 开平市| 光山县| 新泰市| 固安县| 潼南县| 山西省| 万山特区| 盐亭县| 文化| 洛宁县| 贵南县| 辽源市| 黄石市| 垫江县| 锦屏县|