threadlocal是乙個執行緒內部的資料儲存類。某執行緒儲存的資料,只有這個執行緒中才能獲取到儲存的資料。而其他執行緒是無法獲取到這個資料的。
private threadlocalmthreadlocal = new threadlocal();
/***建立乙個泛型為string型別的threadlocal**/
private threadlocalmstringthreadlocal = new threadlocal();
new thread("thread#1")
}.start();
new thread("thread#2")
}.start();
public void set(t value)
threadlocalmap getmap(thread t)
void createmap(thread t, t firstvalue)
if (map != null)
map.set(this, value);
將根據首個要儲存的資料:當前threadlocal和value建立生成乙個entry物件,
並放入table表中第i個位置(i的值是有當前的threadlocal中threadlocalhashcode值間接得到的)
threadlocalmap(threadlocal<?> firstkey, object firstvalue)
static class entry extends weakreference>
}
static class threadlocalmap
public t get()
}return setinitialvalue();
}
1、根據當前執行緒獲取到執行緒對應的threadlocalmap
然後根據當前的threadlocal從threadlocalmap中獲取entry()
private entry getentry(threadlocal<?> key)
2、直接返回值即可
if (e != null)
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...