ThreadLocal原始碼分析

2021-09-25 01:07:29 字數 1223 閱讀 2507

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