1. 程式人生 > 實用技巧 >ThreadLocal類的一些個人理解

ThreadLocal類的一些個人理解

最近面試,可以說五花八門,問的亂七八糟,我的內心也是細碎,怎麼叫技術好?我頓時有點迷茫了。吐槽一下而已!
把一些重要的知識點重新複習一下寫在這裡。
先從此類的設計角度來說吧。
多執行緒資源共享的有兩種解決方案
第一種:空間換時間--------空間即記憶體,在每個執行緒記憶體放一個該資源副本,保證資料的一致性。
第二種:時間換空間--------Synchronized 加鎖機制,保證資料的一致性。
大體上原始碼是一下這樣
public class ThreadLocal<T> 
    public T get() {
    
  }
  
      // 提出為單例模式
  private
T 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; }
今天先複習到這