ThreadLocal

ThreadLocal:線程內(nèi)部的數(shù)據(jù)存儲(chǔ)類(lèi)。

1:我們看下這個(gè)類(lèi)的內(nèi)部有什么東西垦藏。


ThreadLocal1.png

2:關(guān)注ThreadLocal的幾個(gè)方法
第一:get()
貼下源碼

public T get() {
        //獲取當(dāng)前線程
        Thread t = Thread.currentThread();
       //拿到當(dāng)前線程的ThreadLocalMap
        ThreadLocalMap map = getMap(t);
       //通過(guò)ThreadLocalMap獲取當(dāng)前ThreadLocal為key的value
        if (map != null) {
            ThreadLocalMap.Entry e = map.getEntry(this);
            if (e != null) {
                @SuppressWarnings("unchecked")
                T result = (T)e.value;
                return result;
            }
        }
      //如果當(dāng)前線程的ThreadLocalMap沒(méi)有被賦值過(guò),那么就通過(guò)
     //setInitialValue()方法創(chuàng)建一ThreadLocalMap給于當(dāng)前的線程
        return setInitialValue();
    }

setInitialValue()方法:說(shuō)明一下這個(gè)方法只會(huì)被ThreadLocal的get方法調(diào)用蝗柔,個(gè)人是這么理解的塘辅,就是我想要獲取Thread的內(nèi)部數(shù)據(jù),但是發(fā)現(xiàn)這個(gè)Thread連放數(shù)據(jù)的容器都沒(méi)有荠商,那么我也不能白來(lái)一次寂恬,索性先給你個(gè)容器,雖然在set()方法里如果判斷當(dāng)前線程的ThreadLocalMap為null也會(huì)也會(huì)去createpMap莱没,別讓我知道你沒(méi)有初肉,知道你沒(méi)有就給你造個(gè)塞給你

private T setInitialValue() {
        T value = initialValue();
        Thread t = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        if (map != null)
            map.set(this, value);
        else
            createMap(t, value);
        return value;
    }

set方法:看一哈就可以了

 public void set(T value) {
        Thread t = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        if (map != null)
            map.set(this, value);
        else
            createMap(t, value);
    }

然后就是ThreadLocalMap這個(gè)東西,既然是個(gè)map就是個(gè)存數(shù)據(jù)的容器看ThreadLocal的getMap方法

ThreadLocalMap getMap(Thread t) {
        return t.threadLocals;
    }

他 是Thread里的饰躲,所以他存的數(shù)據(jù)就是當(dāng)前線程的內(nèi)部數(shù)據(jù)牙咏,看上面的set方法拿到當(dāng)前線程的map后會(huì)把當(dāng)前的ThreadLocal為key臼隔,然后吧value存在map里,value是個(gè)泛型妄壶,他是根據(jù)定義的ThreadLocal類(lèi)的泛型為標(biāo)準(zhǔn)摔握,像如果在looper類(lèi)里的是ThreadLocal<Looper>,那么這個(gè)value就是looper丁寄,ActivityThread里的是ThreadLocal<Intent>,那么這個(gè)value就是Intent氨淌。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市伊磺,隨后出現(xiàn)的幾起案子盛正,更是在濱河造成了極大的恐慌,老刑警劉巖奢浑,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛮艰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡雀彼,警方通過(guò)查閱死者的電腦和手機(jī)壤蚜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)徊哑,“玉大人袜刷,你說(shuō)我怎么就攤上這事≥撼螅” “怎么了著蟹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)梢莽。 經(jīng)常有香客問(wèn)我萧豆,道長(zhǎng),這世上最難降的妖魔是什么昏名? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任涮雷,我火速辦了婚禮,結(jié)果婚禮上轻局,老公的妹妹穿的比我還像新娘洪鸭。我一直安慰自己,他們只是感情好仑扑,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布览爵。 她就那樣靜靜地躺著,像睡著了一般镇饮。 火紅的嫁衣襯著肌膚如雪蜓竹。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音梅肤,去河邊找鬼司蔬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛姨蝴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肺缕,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼左医,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了同木?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎岛请,沒(méi)想到半個(gè)月后沫浆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡洲尊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年远豺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坞嘀。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡躯护,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出丽涩,到底是詐尸還是另有隱情棺滞,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布矢渊,位于F島的核電站继准,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏矮男。R本人自食惡果不足惜移必,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望昂灵。 院中可真熱鬧避凝,春花似錦、人聲如沸眨补。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)撑螺。三九已至含思,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背含潘。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工饲做, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人遏弱。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓盆均,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親漱逸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子泪姨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

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

  • Android Handler機(jī)制系列文章整體內(nèi)容如下: Android Handler機(jī)制1之ThreadAnd...
    隔壁老李頭閱讀 7,609評(píng)論 4 30
  • 前言 ThreadLocal很多同學(xué)都搞不懂是什么東西,可以用來(lái)干嘛饰抒。但面試時(shí)卻又經(jīng)常問(wèn)到肮砾,所以這次我和大家一起學(xué)...
    liangzzz閱讀 12,424評(píng)論 14 228
  • 總述 ThreadLocal 在面試中經(jīng)常提到,關(guān)于ThreadLocal使用不當(dāng)造成OOM以及在特殊場(chǎng)景下袋坑,通過(guò)...
    墨染書(shū)閱讀 16,056評(píng)論 11 44
  • ThreadLocal源碼深入分析 ThreadLocal :線程本地存儲(chǔ)區(qū)(Thread Local Stora...
    wewarriors閱讀 324評(píng)論 0 3
  • 我的日子仗处, 慢慢過(guò)成了兩個(gè)樣子, 想起你的日子枣宫, 和婆誓, 假裝想不起你的日子。
    壯士一去不FAY閱讀 216評(píng)論 0 0