小程式效能優化~~~本地快取
阿新 • • 發佈:2021-07-01
什麼是ThreadLocal?
1.從原始碼開始瞭解ThreadLocal
首先進入Thread類
(ctrl+f)搜尋會發現Thread類中存在這樣一個變數,這個變數可以提供給我們在當前執行緒中儲存一些東西,這就是ThreadLocal的核心。
ThreadLocal.ThreadLocalMap threadLocals = null;
現在我們移步到ThreadLocal類中
找到getMap(Thread t)這個方法,這個方法是獲取當前執行緒的ThreadLocalMap threadLocals變數,threadLocals就是上面提到的Thread類中的變數
set(T value)方法
首先獲取到當前執行緒,通過getMap方法獲取當前執行緒的ThreadLocalMap threadLocals變數,再以ThreadLocal物件作為key儲存value在當前執行緒的ThreadLocalMap threadLocals中
get()同理從當前執行緒ThreadLocalMap threadLocals變數中獲取一個key為ThreadLocal物件的value
栗子:
public static void main(String[] args) { ThreadLocal<String> tl1 = new ThreadLocal<>(); ThreadLocal<String> tl2 = new ThreadLocal<>(); //建立一個執行緒 testThread Thread testThread = new Thread(() -> { //儲存兩個值到執行緒中 tl1.set("value1"); //通過ThreadLocal向testThread執行緒中的ThreadLocalMap threadLocals變數中set(tl1Object,"value1") tl2.set("value2"); //通過ThreadLocal向testThread執行緒中的ThreadLocalMap threadLocals變數中set(tl2Object,"value2") //通過ThreadLocal從當前執行緒中ThreadLocalMap threadLocals變數中獲取剛剛儲存的兩個值 System.err.println(tl1.get()); System.err.println(tl2.get()); }); testThread.start(); } }