首先來看threadlocal兩個最重要的方法,set()和get()。
public void set(t value)
這裡出現了乙個新的類threadlocalmap,而且是通過getmap(t)得到了他的例項。先看一下getmap是如何實現的。
threadlocalmap getmap(thread t)
其實thread類裡面有乙個內部成員:
threadlocal.threadlocalmap threadlocals = null;
如果map為null,那麼就要createmap。看下createmap是如何實現的:
void createmap(thread t, t firstvalue)
這個threadlocalmap到底是什麼呢.它其實是threadlocal的靜態內部類,本質上是以threadlocal為key,使用開放位址法的hashmap。
所以每次使用set方法時,先得到呼叫該方法的執行緒,取出該執行緒中threadlocalmap(沒有則建立),以當前threadlocal為key,取出相應的value。
接下來看下get方法:
public t get()
}return setinitialvalue();
}
ThreadLocal實現原理與原始碼分析
threadlocal底層實現內部類 threadlocalmap 一 threadlocal的set方法原始碼分析 1 public void set t value thread t thread.currentthread threadlocalmap map getmap t if map ...
ThreadLocal原始碼理解
threadlocal其實原理是建立了多份相同資料儲存在堆記憶體上,每個執行緒的thread類裡有threadlocal.threadlocalmap threadlocals的屬性來指向存位置,所以每個執行緒修改都不會影響到其他執行緒的資料 首先說下下面用到的東西 threadlocalmap為t...
ThreadLocal原始碼分析
在理解handler looper之前,先來說說threadlocal這個類,聽名字好像是乙個本地執行緒的意思,實際上它並不是乙個thread,而是提供乙個與執行緒有關的區域性變數功能,每個執行緒之間的資料互不影響。我們知道使用handler的時候,每個執行緒都需要有乙個looper物件,那麼and...