ThreadLocal原始碼分析

2021-10-10 12:42:05 字數 883 閱讀 9067

一、threadlocal是什麼

從名字我們就可以看到threadlocal叫做執行緒變數,意思是threadlocal中填充的變數屬於當前執行緒,該變數對其他執行緒而言是隔離的。threadlocal為變數在每個執行緒中都建立了乙個副本,那麼每個執行緒可以訪問自己內部的副本變數。

1、set方法

從set方法我們可以看到,首先獲取到了當前執行緒t,然後呼叫getmap獲取threadlocalmap,如果map存在,則將當前執行緒物件t作為key,要儲存的物件作為value存到map裡面去。如果該map不存在,則初始化乙個。

ok,到這一步了,相信你會有幾個疑惑了,threadlocalmap是什麼,getmap方法又是如何實現的。帶著這些問題,繼續往下看。先來看threadlocalmap。

我們可以看到threadlocalmap其實就是threadlocal的乙個靜態內部類,裡面定義了乙個entry來儲存資料,而且還是繼承的弱引用。在entry內部使用threadlocal作為key,使用我們設定的value作為value。

還有乙個getmap

threadlocalmap getmap(thread t) finally

這是因為當前執行緒執行完相關**後,很可能會被重新放入執行緒池中,如果threadlocal沒有被清除,該執行緒執行其他**時,會把上一次的狀態帶進去。

為了保

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