當(dāng)使用ThreadLocal對象維護(hù)一個(gè)變量時(shí)捐腿,ThreadLocal對象為每個(gè)使用該變量的線程提供獨(dú)立的副本,所以線程可以獨(dú)立的改變自己的副本柿顶,而不會影響其他線程的變量副本茄袖。
從線程的角度看,目標(biāo)變量就像是各個(gè)線程的本地變量(線程私有)嘁锯,這也是類名中Local的含義宪祥。
ThreadLocal的實(shí)現(xiàn):
(1)ThreadLocal對象并不存儲值,值存儲在Thread對象的threadLocalMap屬性中家乘。
threadLocalMap 存儲了key位ThreadLocal蝗羊,value為。
(2)ThreadLocal 的 get()方法:首先通過getMap(Thread t)方法獲得當(dāng)前線程的threadLocalMap對象烤低,然后根據(jù)key(key 為當(dāng)前threadLocal對象肘交,即this),從而獲得value扑馁。
(3)setInitialValue()方法中的initialValue()方法是一個(gè)protected方法涯呻,在new 一個(gè)ThreadLocal對象時(shí)可以重寫該方法。