ThreadLocal實現(xiàn)核心ThreadLocalMap

ThreadLocal的使用就是,你在一個類中定義了這么類型的一個變量,不同的線程環(huán)境中g(shù)et,set使用這個變量,會在各自的線程環(huán)境中保存各自的值。可以通過重寫initialValue()為這個變量賦予初始值,默認為null。
ThreadLocal是如何各個線程都有自己對應于這個變量的值的呢?如果是你,你會怎么去實現(xiàn)呢?
java的設計是:ThreadLocalMap去真正的保存和存儲值,每個線程都有自己的ThreadLocalMap。通過ThreadLocal的實例作為key去映射到對應的entry。

static class Entry extends WeakReference<ThreadLocal<?>> {
            /** The value associated with this ThreadLocal. */
            Object value;

            Entry(ThreadLocal<?> k, Object v) {
                super(k);
                value = v;
            }
        }

這里為什么要放出Entry的源碼,因為這里有一個指的思考的地方:為什么對key(ThreadLocal)使用弱引用?因為ThreadLocalMap都是線程持有的,強引用會導致ThreadLocal的泄漏。如果還用了匿名內(nèi)部類的方式使用了ThreadLocal那將導致更多對象的泄漏!

最后,ThreadLocal還有一個蠻有意思的點:
沒有直接使用Object的hashcode。神奇數(shù)字0x61c88647可以看看。

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

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

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