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