ThreadLocal原始碼理解

2021-08-02 23:17:54 字數 1039 閱讀 8324

threadlocal其實原理是建立了多份相同資料儲存在堆記憶體上,每個執行緒的thread類裡有threadlocal.threadlocalmap threadlocals的屬性來指向存位置,

所以每個執行緒修改都不會影響到其他執行緒的資料

首先說下下面用到的東西:threadlocalmapthreadlocal的靜態內部類,他有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達到事務效果 ...