千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)
ThreadLocal就是一種以**空間換時(shí)間**的做法,在每個(gè)Thread里面維護(hù)了一個(gè)以開地址法實(shí)現(xiàn)的ThreadLocal.ThreadLocalMap,把數(shù)據(jù)進(jìn)行隔離,數(shù)據(jù)不共享,自然就沒有線程安全方面的問題了
4.1實(shí)際通過ThreadLocal創(chuàng)建的副本是存儲(chǔ)在每個(gè)線程自己的threadLocals中的;
4.2.為何threadLocals的類型ThreadLocalMap的鍵值為ThreadLocal對象,因?yàn)槊總€(gè)線程中可有多個(gè)threadLocal變量;
4.3.在進(jìn)行g(shù)et之前,必須先set,否則會(huì)報(bào)空指針異常;
因?yàn)樵谏厦娴拇a分析過程中,我們發(fā)現(xiàn)如果沒有先set的話,即在map中查找不到對應(yīng)的存儲(chǔ),則會(huì)通過調(diào)用setInitialValue方法返回i,而在setInitialValue方法中,有一個(gè)語句是T value = initialValue(), 而默認(rèn)情況下,initialValue方法返回的是null。
4.4 如果想在get之前不需要調(diào)用set就能正常訪問的話,必須重寫initialValue()方法。
相關(guān)推薦