JUC ThreadLocal原始碼解析

2021-10-18 22:56:28 字數 665 閱讀 8714

首先,我們在spring中,一般業務類生成的bean都是單例模式,每個業務bean只有乙個物件,故而只有乙個threadlocal物件.

public class businessbean 

};public void dobusinessstuff()

}

同乙個業務bean,同乙個threadlocal物件,不同的執行緒,為什麼可以互不干擾,互有不同的值?來看原始碼。

1. 每個threadlocal物件在初始化時,都產生乙個threadlocalhashcode

2.threadlocal有乙個threadlocalmap的內部類,threadlocalmap有乙個entry的內部類,entry繼承了weakreference,這說明:

3. 由下圖可以看出

即,每個執行緒,都有乙個它獨有的threadlocalmap物件,初始值為threadlocal持有的值,對threadlocal的get與set,實際是操作當前執行緒的threadlocalmap中的值,所以互不影響

官方源 映象源彙總

網易 http 阿里雲 http 上海交通大學 http ftp.sjtu.edu.cn html resources.xml 部分移動運營商出口狀況不佳,無法訪問 華中科技大學 http mirror.hust.edu.cn 當前已用容量估計 4.83t 清華大學 http mirrors.tun...

官方源 映象源彙總

網易 阿里雲 上海交通大學 部分移動運營商出口狀況不佳,無法訪問 華中科技大學 當前已用容量估計 4.83t 清華大學 當前已用容量估計 9.8t 北京理工大學 蘭州大學 中國科技大學 當前已用容量估計 21.32t 大連東軟資訊學院 當前已用容量估計 2.5t 東北大學 大連理工大學 哈爾濱工業大...

官方源 映象源彙總

網易 阿里雲 上海交通大學 部分移動運營商出口狀況不佳,無法訪問 華中科技大學 當前已用容量估計 4.83t 清華大學 當前已用容量估計 9.8t 北京理工大學 蘭州大學 中國科技大學 當前已用容量估計 21.32t 大連東軟資訊學院 當前已用容量估計 2.5t 東北大學 大連理工大學 哈爾濱工業大...