1. 程式人生 > >ThreadLocal原始碼簡單解析

ThreadLocal原始碼簡單解析

ThreadLocal

    ThreadLocal我一開始接觸的時候,以為是“本地執行緒”搞的我雲裡霧裡的,看了內部實現後,這個Local應該稱為“區域性”。

    在《多執行緒併發程式設計實戰》提到:維持執行緒封閉性的一種規範方法,這個類為每個使用該變數的執行緒都存有一份獨立的副本

問題-解析

    為每個使用該變數的執行緒都存有一份獨立的副本? 這是怎麼實現的呢?

    ThreadLocal並非執行緒,而是一個執行緒的區域性變數。準確的來說ThreadLocalMap是執行緒的一個區域性變數,而ThreadLocal包裝了一些方法。

    //ThreadLocalMap會根據TheadLocal得到table[i]中的Entry(簡略的拉鍊法Map),Entry存放的就是key和value。

//整個流程就是ThreadLocal根據Thread得到當前執行緒中的區域性變數ThreadLocalMap這也是為什麼每個使用這個變數都有一份獨立的副本的緣故,然後在ThreadLocal中再通過this得到存放在Map中的Entry(多份ThreadLocal不會衝突的原因)。ThreadLocal中的get,set其實都是對執行緒本身中的變數進行操作。

見原始碼(主要看get()和set()):