【Java基礎】ThreadLocal源碼解析

查看ThreadLocal的源碼,大體上可以劃分爲ThreadLocal、Thread、ThreadLocalMap這三個類,所以主要分析一下這三個類的聯繫。

Thread

Thread是線程類,通過Thread.currentThread()方法可以獲取當前線程,並且Thread維護一個ThreadLocalMap成員變量用於存儲線程私有變量(ThreadLocal.ThreadLocalMap threadLocals = null;)
在這裏插入圖片描述

ThreadLocalMap

ThreadLocalMap,作爲ThreadLocal的靜態內部類,類似map結構,內部維護一個Entry[]數組,Entry類存儲key、value鍵值對。這個map是主要用來存儲線程私有變量的。
設值時先根據當前ThreadLocal計算出應該存儲在Entry[]中的位置,即數組下標。如果當前下標已存在值,則覆蓋value,不存在則設置Entry(key,value)存儲在當前下標。

在這裏插入圖片描述
取值時先根據當前ThreadLocal計算出在Entry[]數組中存儲的位置即下標。然後根據下標取出Entry,然後得到Entry.value。

ThreadLocal

ThreadLocal是入口,相當於一個工具類,提供了一些方法通過ThreadLocal.set()、get() 方法可以直接操作當前線程的ThreadLocalMap。

在這裏插入圖片描述

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章