ThreadLocalMap

expungeStaleEntry(int staleSlot):
(1)清理當前位置 staleSlot 的臟 Entry 節(jié)點爷耀,將該臟 Entry.value 置 null不撑,接著將 hash 表的當前位置置 null,這樣下次 gc
如果 value 沒其它引用了就會被回收掉,臟 Entry 節(jié)點對象也會被回收掉宣渗,hash 表元素數(shù)量減一嘶是;
(2)從當前位置的下一個環(huán)形位置開始循環(huán)對 Entry 節(jié)點進行清理或 rehash,直到碰到某個位置沒有 Entry 節(jié)點為止晴埂。在這個過程中究反,
對于每個位置的 Entry 節(jié)點,如果它是臟 Entry儒洛,就對它進行清理精耐,清理邏輯和(1)一樣,否則是正常 Entry 節(jié)點琅锻,就會判斷它是否
要 rehash卦停,判斷依據(jù)是根據(jù)它的 threadLocalHashCode 確定它的存儲位置,如果是當前位置恼蓬,什么都不做惊完,如果不是當前位置,說明
之前在加入這個節(jié)點時存在 hash 沖突处硬,通過線性探測存儲到了當前位置小槐,那么就會對該節(jié)點進行 rehash,先將當前 hash 表位置置 null郁油,
然后先判斷它直接計算出來的存儲位置本股,如果為 null 說明存在 hash 沖突的節(jié)點被清理了,則將 Entry 節(jié)點存儲到該位置桐腌,否則會進行
線性探測拄显,向后環(huán)形搜索找到第一個節(jié)點為 null 的位置,并將 Entry 節(jié)點存儲到該位置案站,這樣就會把清理臟 Entry 后空出來的位置給
填充上躬审,這樣做的目的是為了避免 ThreadLocal.get()、set()、remove() 這些方法時出現(xiàn)錯誤承边,這三個方法在執(zhí)行時都會查找當前 ThreadLocal
對象對應的 Entry 節(jié)點是否存在遭殉,判斷是否存在的依據(jù)就是根據(jù)當前 ThreadLocal 對象的 threadLocalHashCode 直接計算出來的存儲位
置或者向后環(huán)形查找的位置是否存在弱引用指向當前 ThreadLocal 對象的 Entry 節(jié)點,這個過程會在碰到第一個 null 節(jié)點時結束博助,此時
就認為不存在當前 ThreadLocal 對象對應的 Entry 節(jié)點了险污,如果不判斷是否要 rehash 而只是清理臟 Entry 的話,可能由于處于臟 Entry
節(jié)點位置環(huán)形順序后面的位置存在和臟 Entry 節(jié)點有 hash 沖突的并且弱引用指向當前 ThreadLocal 對象的節(jié)點富岳,這樣就會導致向后環(huán)形
查找時提前退出而無法找到當前 ThreadLocal 獨象對應的 Entry 節(jié)點蛔糯,對于 get() 方法就是無法讀取到當前 ThreadLocal 對象的值,
對于 remove() 方法就是無法刪除當前 ThreadLocal 對象的值窖式,對于 set() 方法就會在 null 節(jié)點位置創(chuàng)建并存儲一個新的 Entry 節(jié)點蚁飒,
導致 ThreadLocalMap hash 表中存在了兩個弱引用指向當前 ThreadLocal 對象的節(jié)點。
(3)最后返回導致循環(huán)退出的 null 節(jié)點的位置萝喘。
簡單總結:
清理 "[當前臟 Entry 位置, 下一個為 null 的環(huán)形位置]" 之間的所有臟 Entry淮逻,并對正常 Entry 依據(jù)情況做 rehash,返回下一個為
null 的環(huán)形位置阁簸。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末爬早,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子强窖,更是在濱河造成了極大的恐慌凸椿,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翅溺,死亡現(xiàn)場離奇詭異脑漫,居然都是意外死亡,警方通過查閱死者的電腦和手機咙崎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門优幸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人褪猛,你說我怎么就攤上這事网杆。” “怎么了伊滋?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵碳却,是天一觀的道長。 經(jīng)常有香客問我笑旺,道長昼浦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任筒主,我火速辦了婚禮关噪,結果婚禮上鸟蟹,老公的妹妹穿的比我還像新娘。我一直安慰自己使兔,他們只是感情好建钥,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著虐沥,像睡著了一般熊经。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上欲险,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天奈搜,我揣著相機與錄音,去河邊找鬼盯荤。 笑死,一個胖子當著我的面吹牛焕盟,可吹牛的內(nèi)容都是我干的秋秤。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼脚翘,長吁一口氣:“原來是場噩夢啊……” “哼灼卢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起来农,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤鞋真,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后沃于,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涩咖,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年繁莹,在試婚紗的時候發(fā)現(xiàn)自己被綠了檩互。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡咨演,死狀恐怖闸昨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情薄风,我是刑警寧澤饵较,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站遭赂,受9級特大地震影響循诉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嵌牺,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一打洼、第九天 我趴在偏房一處隱蔽的房頂上張望龄糊。 院中可真熱鬧,春花似錦募疮、人聲如沸炫惩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽他嚷。三九已至,卻和暖如春芭毙,著一層夾襖步出監(jiān)牢的瞬間筋蓖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工退敦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留粘咖,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓侈百,卻偏偏與公主長得像瓮下,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子钝域,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容