ThreadLocal個人理解

2021-10-05 22:37:26 字數 722 閱讀 5155

每乙個thread物件中有乙個threadlocalmap的map屬性【該map的key是乙個弱引用(key被weakreference物件指向),當gc時就會**該entry就會**map屬性,避免了記憶體洩漏】,當使用threadlocal時,當threadlocal屬性作為map的key,將當前執行緒中需要儲存的物件作為value,即使用threadlocal的執行緒中都使用了乙個以threadlocal物件為key的map。一般threadlocal都作為類的靜態全域性變數存在,這樣每個執行緒的key都是確定的,都使用相同的key。

@transactional事務註解功能的實現使用threadlocal,儲存了每個執行緒的connection資料庫連線物件

threadlocal

threadlocal =

newthreadlocal

<

>()

; threadlocal.

set(1)

; object o = threadlocal.

get();

system.out.

println(1

); threadlocal.

remove()

;//每次用完threadlocal後都要threadlocal都要remove map物件中的entry,避免threadlocal物件**後,key變成了null,永遠不會被**entry,導致記憶體洩漏

ThreadLocal個人理解

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

ThreadLocal的個人理解

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

個人對threadlocal的理解

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