用戶要跨方法訪問變量,但若變量是全局變量的話雖然能訪問了,但可能會產生併發問題,這時能夠把要共享的值放入ThreadLocal中,線程內都能訪問到,但全部線程訪問卻只能訪問本身的,沒法訪問其餘線程的,這就至關於線程私有的共享變量併發
ThreadLocal至關於在內部作了線程識別,哪條線程放進該全局變量的數據,只有該線程才能訪問。異步
Thread類有個屬性,持有ThreadLocal的靜態內部類ThreadLocalMap的引用,放進來的值就存放在這裏。ThreadLocal的經常使用操做get/set/remove中,都是先根據Thread.currentThread()獲取當前線程這個對象,而後根據這個對象獲取其屬性中ThreadLocalMap的引用threadLocals,這個map以當前線程做爲key,放進的值做爲value來存取,所以當前線程只能獲取當前線程放進去的值了,從而達到識別線程的效果。spa
這更可能是一種技巧,而不是技術,其並不是是什麼語言新特性,不過是封裝了這些手段和技巧,從而達到了對於不瞭解的人來講像java語言的一種特性同樣,甚至java的特性不過也是對更底層的一種封裝而已。線程