千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)
ThreadLocal就是一種以**空間換時間**的做法,在每個Thread里面維護了一個以開地址法實現(xiàn)的ThreadLocal.ThreadLocalMap,把數(shù)據(jù)進行隔離,數(shù)據(jù)不共享,自然就沒有線程安全方面的問題了
4.1實際通過ThreadLocal創(chuàng)建的副本是存儲在每個線程自己的threadLocals中的;
4.2.為何threadLocals的類型ThreadLocalMap的鍵值為ThreadLocal對象,因為每個線程中可有多個threadLocal變量;
4.3.在進行g(shù)et之前,必須先set,否則會報空指針異常;
因為在上面的代碼分析過程中,我們發(fā)現(xiàn)如果沒有先set的話,即在map中查找不到對應的存儲,則會通過調(diào)用setInitialValue方法返回i,而在setInitialValue方法中,有一個語句是T value = initialValue(), 而默認情況下,initialValue方法返回的是null。
4.4 如果想在get之前不需要調(diào)用set就能正常訪問的話,必須重寫initialValue()方法。
上一篇
垃圾回收機制(算法原理)相關(guān)推薦