ThreadLocal原始碼分析

2021-10-04 04:49:34 字數 679 閱讀 1731

threadlocal

threadlocal、threadlocalmap、thread、entry

thread 持有 threadlocalmap

threadlocalmap 內部儲存是 entry

entry 初始長度 16, 使用長度超過1/2時擴容

entry的索引是 threadlocal的 hashcode & (len-1)為初始值,如果已經被占用,則往後迴圈。沒有則儲存對應的entry。

entry 的key是 threadlocal, value是對應的值。

entry extends weakreference 弱引用,gc時threadlocal回被**

set方法

threadlocal.threadlocalhashcode & (len-1) 為初始index,在entry往後迴圈尋找坑位

如果entry為null,則初始化值

如果entry.key 為null,則是弱引用被**,則重新例項化entry

如果entry和entry.key都不為null,則替換值

get方法

類似set,threadlocal被**之後重新初始化並返回null

擴容entry長度超過2/3時觸發rehash,清理被gc**的threadlocal

entry長度超過1/2時resize,

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...