boy-learning-thread | 1.1.5 線程封閉之ThreadLocal和棧封閉

相關(guān)源碼:boy-learning-thread
個人博客:http://bruce.bugmakers.club
內(nèi)容來自《網(wǎng)易微專業(yè) - 高性能編程章節(jié)》

線程封閉之ThreadLocal和棧封閉

線程封閉概念

背景:多線程訪問共享可變數(shù)據(jù)時,涉及到線程間數(shù)據(jù)同步的問題。并不是所有時候,都要用到共享數(shù)據(jù),所以線程封閉概念就提出來了。

線程封閉:數(shù)據(jù)都被封閉在各自的線程之中,就不需要同步,這種將數(shù)據(jù)封閉在線程之中而避免使用同步的技術(shù)稱。

線程封閉具體的體現(xiàn)有:ThreadLocal、局部變量。

ThreadLocal

ThreadLocal 是 Java 里一種特殊的變量。

它是一個線程級別的變量,每個線程都有一個 ThreadLocal 就是每個線程都有了自己獨(dú)立的一個變量,競爭條件徹底被消除了,在并發(fā)模式下是絕對安全的變量。

用法:

ThreadLocal<T> var = new ThreadLocal<T>();

會自動在每一個線程上創(chuàng)建一個 T 的副本,副本之間彼此獨(dú)立,互不影響。

可以用 ThreadLocal 存儲一些參數(shù),以便在線程中多個方法中使用,用來代替方法傳參的做法。

實(shí)在難以理解,可以理解為,JVM維護(hù)了一個 Map<Thread, T>,每個線程要用這個 T 的時候,用當(dāng)前線程去 Map 里取。——僅作為概念理解。

棧封閉(局部變量)

局部變量的固有屬性之一就是封閉在線程中。

它們被存儲在執(zhí)行線程的棧內(nèi)存中,其他線程無法訪問這個棧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容