ThreadLocal原始碼分析

2021-08-22 19:27:56 字數 719 閱讀 8093

首先來看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...