併發 ThreadLocal 強 軟 弱 虛

2021-10-25 07:51:40 字數 651 閱讀 5673

threadlocal 從名字上看,叫執行緒變數。可以理解為每個執行緒獨有的變數。

1. 看原始碼我們就會知道,threadlocal核心是threadlocalmap 容器。

2. 這個容器在set值時是以當前的threadlocal為key的,執行緒之間

的資訊都是獨享的,保證了執行緒安全問題。

3. 最重要的一點是map的這個key被傳遞給了弱引用。

4. 這裡說下弱引用:只要是觸發了gc弱引用就會被**

5. 由於3、4兩條,當threadlocal 引用 == null 值會被gc**

但是呢threadlocalmap和執行緒生命週期是一樣的不會被**,

此時被變成了key沒了但是value還在這樣就很容易造成記憶體洩漏

6. 所有當用完threadlocal 我們應該手動的去remove()下,避免記憶體洩漏

1.強: 我們常用的乙個引用 = new 物件()就是強引用.

當失去了引用,該物件在gc時就會被**。

2.軟: 當堆記憶體不足時,gc就**軟引用。軟引用經常用來做快取

3.弱: 只要觸發gc就會被**。

4.虛: **會返回乙個通知,

jvm工作者用來監控並**堆外記憶體用的。

ThreadLocal和強軟弱虛

強引用 strongreference 最傳統的 引用 的定義,是指在程式 之中普遍存在的引用賦值,即類似 object obj new object 這種引用關係。無論任何情況下,只要強引用關係還存在,垃圾收集器就永遠不會 掉被引用的物件。軟引用 softreference 在系統將要發生記憶體溢...

ThreadLocal為什麼不用強引用

我們看看key使用的 當hreadlocalmap的key為強引用 threadlocal時,因為threadlocalmap還持有threadlocal的強引用,如果沒有手動刪除,threadlocal不會被 導致entry記憶體洩漏。譬如 設定 threadlocal null 以後,應該會被 ...

併發程式設計14 ThreadLocal

public class threadlocaltest public int getnext public static void main string args catch interruptedexception e start new thread new runnable catch i...