ThreadLocal學習總結

2022-08-20 20:39:14 字數 1168 閱讀 7177

public

class

threadlocaltest

};"測試threadlocal");

system.out.println(threadlocal.get());}}

學習threadlocal,首先先從它的資料結構開始,threadlocal的內部類threadlocalmap

// 只是擷取部分

static

class

threadlocalmap

}

而threadlocalmap又儲存在thread中。

/*

threadlocal values pertaining to this thread. this map is maintained

* by the threadlocal class.

*/threadlocal.threadlocalmap threadlocals = null;

threadlocal中的幾個重要方法,提供了重要的操作

get方法

這裡通過getmap方法獲取當前執行緒中的所有threadlocal記錄threadlocals,先判斷是否已有值,如果沒有則呼叫setinitialvalue()賦值

set()方法

先判斷是否有值了,如果有則覆蓋,沒有則建立新的map物件。

remove方法

總結:thread通過threadlocalmap來儲存執行緒中的變數,第一次獲取時需要先通過set()將值儲存進map中。通過泛型來區分給個變數的key。

參考:

ThreadLocal變數學習

threadlocal即本地執行緒,被threadlocal修飾的變數會在每個執行緒的私有緩衝內複製乙個完全相同的物件副本,從而避免了變數共享時候的執行緒安全問題 package thread.threadlocal public class threadlocalvariabletest publ...

ThreadLocal學習筆記

最近看一些面經,好像很多時候都有提到threallocal的實現原理,之前在學習多執行緒的時候似乎沒有太注意threadlocal這個本地執行緒,現在看看原始碼,學習一下。threadlocal是執行緒內部的資料儲存類,通過它可以指定的執行緒中儲存資料,資料儲存以後,只有在指定執行緒中可以獲取到儲存...

ThreadLocal引起記憶體洩露總結

我們都知道threadlocal能給每乙個執行緒建立乙個副本,確保多個執行緒訪問資源的安全性。但是threadlocal使用不當會造成記憶體洩漏。首先分析一下threadlocal記憶體洩漏原理。threadlocal底層其實是乙個threadlocalmap,是以形式儲存變數副本的。但是由於key...