ThreadLocal實戰(zhàn)(二:InheritableThreadLocal)

一:InheritableThreadLocal解決了什么問題?

上文提到了ThreadLocal,但是ThreadLocal有個明顯的問題,就是它無法解決父子線程傳遞問題

于是介紹一種新的ThreadLocal:InheritableThreadLocal

來看看測試用例:

Test

可以看到我在主線程set了一個值,在子線程拿不到它的值,當(dāng)然,他們是不同的線程,可是對于上下文來說,很多場景是依賴一個共同的限界,而不希望創(chuàng)建子線程就丟掉這個環(huán)境,于是我們可以使用InheritableThreadLocal.

二:InheritableThreadLocal使用方式和源碼

InheritableThreadLocal用法

如圖,可見和上一篇ThreadLocal的用法介紹沒什么兩樣,就是換了個api。

那么它是如何實現(xiàn)父子線程同步的呢。


Thread構(gòu)造函數(shù)

Thread構(gòu)造里調(diào)用了init方法


init方法

init方法內(nèi)部實現(xiàn)如上圖,它會判斷inheritableThreadLocals是否為空,如果不空,就拷貝父線程的ThreadLocalMap給子線程。就這么簡單,具體代碼大家可以自己去研究

項目代碼:https://github.com/Spring5945/Concurrent

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

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

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