一: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