1. 程式人生 > >ThreadLocal 的實現原理

ThreadLocal 的實現原理

為每個執行緒都建立一個獨立變數,做到了執行緒隔離。

每個執行緒都這樣一個例項ThreadLocal.ThreadLocalMap threadLocals = null;

ThreadLocalMap 是一個雜湊表,key 為 ThreadLocal 型別的弱引用,value 為實際放入的值。

在往 ThreadLocal 物件裡塞值的時候,其實就是向當前執行緒的 ThreadLocalMap 物件裡面塞值,key 就是此 ThreadLocal 物件的弱引用。

不同於《HashMap》,ThreadLocalMap 處理雜湊衝突採用的是《線性探測法》。

上面已經提到,這個雜湊表的 key 是弱引用,因此特定情況下 JVM 會使其失效,即對這些 key 代表的元素做了刪除標記。

在 set、get、remove 方法中,都會涉及到清理操作來刪除被標記的元素。