1. 程式人生 > >ThreadLocal Thread ThreadLocalMap 之間的關係

ThreadLocal Thread ThreadLocalMap 之間的關係

`ThreadLocal` :每個執行緒通過此物件都會返回各自的值,互不干擾,這是因為每個執行緒都存著自己的一份副本。需要注意的是執行緒結束後,它所儲存的所有副本都將進行垃圾回收(除非存在對這些副本的其他引用) `ThreadLocal`的`get`操作是這樣執行的:`ThreadLocalMap map = thread.threadLocals` -> `return map.getEntry(threadLocal)` `ThreadLocal`的`set`操作是這樣執行的:`ThreadLocalMap map = thread.threadLocals` -> `map.set(threadLocal, value)` 三者的關係是: - 每個`Thread`對應的所有`ThreadLocal`副本都存放在`ThreadLocalMap`物件中,`key`是`ThreadLocal`,`value`是副本資料 - `ThreadLocalMap`物件存放在`Thread`物件中 - 通過`ThreadLocal`獲取副本資料時,實際是通過訪問`Thread`來獲取`ThreadLocalMap`,再通過`ThreadLocalMap`獲取副本資料 示例程式碼如下: ```java import java.lang.reflect.Field; import java.util.Arrays; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.stream.Collectors; /** * @author: lihui * @date: 2020-06-01 */ public class ThreadLocalStudy { private static final Thr