threadlocal其實原理是建立了多份相同資料儲存在堆記憶體上,每個執行緒的thread類裡有threadlocal.threadlocalmap threadlocals的屬性來指向存位置,
所以每個執行緒修改都不會影響到其他執行緒的資料
首先說下下面用到的東西:threadlocalmap為threadlocal的靜態內部類,他有entry陣列來存放本地變數
static class
entry
extends
weakreference
<?>>
}
threadlocal get方法原始碼 它會呼叫getmap(t)方法,這個getmap()方法會返回當前執行緒的threadlocalmap的例項,通過threadlocalmap的getentry()方法
根據當前threadload獲取到entry後取得值。如果當前執行緒沒有threadlocalmap的引用,則初始化一分資料並將引用傳給當前執行緒。
public t get()
}return setinitialvalue();
}
threadlocalmap getmap(thread t)
private t setinitialvalue()
threadlocal set方法也是通過getmap方法獲取到當前執行緒對應的threadlocalmap後設定值,如果map為空則先為執行緒建立threadlocalmap並將值放入以當前
threadlocal為entry的k
public
void
set(t value)
void createmap(thread t, t firstvalue)
ThreadLocal原始碼分析
在理解handler looper之前,先來說說threadlocal這個類,聽名字好像是乙個本地執行緒的意思,實際上它並不是乙個thread,而是提供乙個與執行緒有關的區域性變數功能,每個執行緒之間的資料互不影響。我們知道使用handler的時候,每個執行緒都需要有乙個looper物件,那麼and...
ThreadLocal 原始碼解讀
在正式讀 前先簡單介紹threadlocal的實現方式。每個執行緒都會有乙個threadlocalmap,只有在使用到threadlocal的時候才會初始化threadlocalmap。需要儲存的物件t會被放到entry裡面儲存在threadlocalmap的陣列中,entry是乙個鍵值對的資料結構...
ThreadLocal原始碼分析
threadlocal使用的常見場景 1 登入使用者資訊的存放 usercontext持有乙個threadlocal 2 框架中 事務需要將connection放入threadlocal 保證多個 dao或者service操作 被外層的service的時候使用同乙個connection達到事務效果 ...