石建 | 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、相同hash,key不同,當前元素做為單向鏈的第一個元素,原來第一個元素做為當前元素的下一個。
          ThreadLocalMap策略:a相同,是不存在b情況;以ThreadLocal作為key,ThreadLocalthreadLocalHashCode由原子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 閱讀(326) 評論(0)  編輯  收藏 所屬分類: 一點理解

          導航

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

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          What 、How、Why,從細節中尋找不斷的成長點
          主站蜘蛛池模板: 南宫市| 尚义县| 临沭县| 行唐县| 玛多县| 鹤峰县| 犍为县| 房产| 潜江市| 新龙县| 凉山| 赤峰市| 杨浦区| 多伦县| 巴林左旗| 濮阳市| 都匀市| 南充市| 简阳市| 嘉禾县| 桦南县| 三江| 襄樊市| 中超| 澄迈县| 富阳市| 泾阳县| 抚远县| 西安市| 德清县| 华坪县| 卢龙县| 石门县| 太保市| 灌云县| 吉水县| 乐平市| 固始县| 广宁县| 衡南县| 上林县|