1. 程式人生 > 其它 >核心知識-ThreadLocal介紹+經典應用場景

核心知識-ThreadLocal介紹+經典應用場景

核心知識-ThreadLocal介紹+經典應用場景

什麼是ThreadLocal

全稱thread local variable(執行緒區域性變數)功用非常簡單,使用場合主要解決多執行緒中資料因併發產生不一致問題。

ThreadLocal為每一個執行緒都提供了變數的副本,使得每個執行緒在某時間訪問到的並不是同一個物件,這樣就隔離了多個執行緒對資料的資料共享,這樣的結果是耗費了記憶體,但大大減少了執行緒同步所帶來效能消耗,也減少了執行緒併發控制的複雜度。

總結起來就是:同個執行緒共享資料

注意:ThreadLocal不能使用原子型別,只能使用Object型別

ThreadLocal的底層原理

ThreadLocal是解決多執行緒中共享變數的問題。所以若每個執行緒有自己單獨地變數就可以解決該問題。

ThreadLocal的設計原理也是如此:在每個Thread中有單獨地ThreadLocalMap,它相當於一個map。

它的key是ThreadLocal,值是Object。相當於對於單執行緒而言,每個ThreadLocal都會放在這個Map中,且有效隔離。

對於多執行緒而言,有多個ThreadLocalMap,使用同一個ThreadLocal作為key,每個執行緒中的ThreadLocalMap的值是隔離的。

對於多執行緒多ThreadLocal而言,也是同理。

簡單來說,就是每一個執行緒有單獨隔離的ThreadLocalMap,而ThreadLocal僅僅是ThreadLocalMap中的一個Key,用於獲取Value,而Value正因為ThreadLocalMap是隔離的,所以它也是被隔離的。

核心應用場景

ThreadLocal 用作每個執行緒內需要獨立儲存資訊,方便同個執行緒的其他方法獲取該資訊的場景。

每個執行緒獲取到的資訊可能都是不一樣的,前面執行的方法儲存了資訊後,後續方法可以通過ThreadLocal 直接獲取到,避免了傳參,類似於全域性變數的概念,比如使用者登入令牌解密後的資訊傳遞(還有使用者許可權資訊、從使用者系統獲取到的使用者名稱、使用者ID)