ThreadLocal的個人理解

2021-07-05 07:04:56 字數 841 閱讀 7430

threadlocal的設計思想十分簡單,它的核心物件就是threadlocalmap,被宣告在thread類裡面,每個thread都持有乙個threadlocalmap,所以才能實現執行緒隔離,以達到儲存共享變數的作用:

threadlocal.threadlocalmap threadlocals = null;
//設定當前執行緒的共享變數的值,key為threadlocal物件本身,value為共享變數的值

public void set(t value)

//獲取當前執行緒的共享變數的值

public t get()

return setinitialvalue();

}//得到執行緒的threadlocalmap物件

threadlocalmap getmap(thread t)

//為乙個執行緒建立乙個threadlocalmap物件

void createmap(thread t, t firstvalue)

我們來說說threadlocalmap這個物件,它是乙個hashmap結構,每個key和value都構成乙個entry,這個entry繼承了弱引用:

static class entry extends weakreference

}

在通常使用中,threadlocal會被宣告為private static final的,這樣threadlocal的強引用一直存在,threadlocalmap中的entry就不會被**,但是任何時候都能根據threadlocal的弱引用訪問到entry的value值,然後remove它,防止記憶體洩露。

ThreadLocal個人理解

為了加深理解,將最近對threadlocal的了解和原始碼分析記錄總結一下。threadlocal可以為執行緒提供區域性變數。使用threadlocal的get 方法,可以在當前執行緒能夠訪問的類和方法中,得與當前執行緒相關聯的變數值。不過,執行緒區域性變數並不是由threadlocal物件儲存維護...

ThreadLocal個人理解

每乙個thread物件中有乙個threadlocalmap的map屬性 該map的key是乙個弱引用 key被weakreference物件指向 當gc時就會 該entry就會 map屬性,避免了記憶體洩漏 當使用threadlocal時,當threadlocal屬性作為map的key,將當前執行緒...

個人對threadlocal的理解

threadlocal它操作的是當前執行緒的區域性變數 public void set t value public t get return setinitialvalue public void remove 上面是threadlocal的get 和set 方法的原始碼,可以看到threadlo...