ThreadLocal類的一些個人理解
阿新 • • 發佈:2020-12-15
最近面試,可以說五花八門,問的亂七八糟,我的內心也是細碎,怎麼叫技術好?我頓時有點迷茫了。吐槽一下而已!
把一些重要的知識點重新複習一下寫在這裡。
先從此類的設計角度來說吧。
多執行緒資源共享的有兩種解決方案
第一種:空間換時間--------空間即記憶體,在每個執行緒記憶體放一個該資源副本,保證資料的一致性。
第二種:時間換空間--------Synchronized 加鎖機制,保證資料的一致性。
大體上原始碼是一下這樣
public class ThreadLocal<T> public T get() { } // 提出為單例模式 privateT setInitialValue(){ Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) map.set(this, value); else createMap(t, value); } void createMap(Thread t, T firstValue) { t.threadLocals = new ThreadLocalMap(this, firstValue); } // 靜態內部類的設計 妙處在於所有ThreadLocal例項共享一個ThreadLocalMap static ThreadLocalMap { private Entry[] table; }
通過上述程式碼我們會發現一個執行緒只會存在ThreadLocalMap例項,並且是一個懶載入的單例模式。而且該Map的key是ThreadLocal例項本身,而value是initialValue方法設定的物件
// 此方法提供了threadlocal的初始化 protected T initialValue() {return null; }
今天先複習到這