Java——ThreadLocal的使用
概述
ThreadLocal:依附在線程上的變量的媒介。在每一個Thread類中都有一個ThreadLocalMap的實例,源碼中是這樣體現的
/* ThreadLocal values pertaining to this thread. This map is maintained
* by the ThreadLocal class.
*/
ThreadLocal.ThreadLocalMap threadLocals = null;
ThreadLocalMap是以ThreadLocal對象為鍵,任意對象為值的Map.通過ThreadLocal類中的 get,set,initialValue方法可以獲取,設置,初始化:依靠ThreadLocal類作為媒介依附在線程上的任意對象。
使用場景
一個對象功能的施展需要依賴於一個線程:如唯一標示一個線程,用來調試並發執行的程序哪個線程出現了問題;或者用來追蹤多線程環境下每一個線程的執行軌跡。在數據庫中,一個事務可能會重複的拿同一個鎖,以及維護自身的SavePoint,以便回滾的時候使用到。實際上一個事務就對應著一個線程,通過ThreaLocald把事務的實現類依附在線程上,這樣就方便處理鎖的緩存,事務回滾,日誌記錄等問題了。
例子
用ThreadLocal實現CLH鎖的時候用到
https://yq.aliyun.com/articles/124841?spm=5176.8091938.0.0.fRxoE5
最後更新:2017-07-13 09:02:21