1. 程式人生 > >ThreadLocal原理分析

ThreadLocal原理分析

##本文結構 - `ThreadLocal`簡介 (簡要說明`ThreadLocal`的作用) - `ThreadLocal實`現原理(說明`ThreadLocal`的常用方法和原理) - `ThreadLocalMap`的實現 (說明核心資料結構`ThreadLocalMap`的實現) ## ThreadLocal簡介 ------------------------------ 先貼一段官方的文件解釋 ``` /** * This class provides thread-local variables. These variables differ from * their normal counterparts in that each thread that accesses one (via its * {@code get} or {@code set} method) has its own, independently initialized * copy of the variable. {@code ThreadLocal} instances are typically private * static fields in classes that wish to associate state with a thread (e.g., * a user ID or Transaction ID). */ ``` 大意是ThreadLocal類提供了一個執行緒的本地變數,每一個執行緒持有一個這個變數的副本並且每個執行緒讀取`get()`到的值是不一樣的,可以通過`set()`方法設定這個值; **在某些情況下使用ThreadLocal可以避免共享資源的競爭,同時與不影響執行緒的隔離性**。 通過threadLocal.set方法將物件例項儲存在每個執行緒自己所擁有的threadLocalMap中, 這樣每個執行緒使用自己儲存的ThreadLocalMap物件,不會影響執行緒之間的隔離。 看到這裡的第一眼我一直以為ThreadLocal是一個map,每一個執行緒都是一個key,對應一個value,但是是不正確的。正確的是每個執行緒持有一個ThreadLocalMap的副本,這個map的鍵是ThreadLocal物件,各個執行緒中同一key對應的值可以不一樣。 ## ThreadLocal實現原理 ------------------------------ ###`ThreadLocal`中的欄位與構造方法 > >詳細說明參考註釋 >``` >public class Thr