參考小端有話說裹刮,侵改音榜;
定義
每個(gè)線程,都會(huì)有一個(gè)Map(ThreadLocal.ThreadLocalMap)捧弃,用來存儲(chǔ)以我們定義的ThreadLocal對(duì)象為key赠叼,以我們自定義的值為value的名值對(duì)。以此機(jī)制违霞,保證了多線程間該變量值的隔離梅割。
結(jié)論
同步與ThreadLocal是解決多線程中數(shù)據(jù)訪問問題的兩種思路,前者是數(shù)據(jù)共享的思路葛家,后者是數(shù)據(jù)隔離的思路
擴(kuò)展:內(nèi)存泄漏問題户辞。
ThreadLocal對(duì)象是弱引用。在GC時(shí)癞谒,會(huì)直接回收底燎。這種情況下刃榨,Map中的key為null,value值還在双仍,無法得到及時(shí)的釋放枢希。目前的策略是在調(diào)用get、set朱沃、remove等方法時(shí)苞轿,會(huì)啟動(dòng)回收這些值。但是如果一直沒調(diào)用呢逗物?嗯搬卒,很容易就導(dǎo)致內(nèi)存泄漏了。當(dāng)然翎卓,并不能因?yàn)榇司驼J(rèn)為是弱引用導(dǎo)致的內(nèi)存泄露契邀,而應(yīng)該是,設(shè)計(jì)的這個(gè)變量存儲(chǔ)機(jī)制失暴,導(dǎo)致了泄露坯门。所以在使用的時(shí)候,要及時(shí)釋放逗扒。