1. 程式人生 > 其它 >小程式效能優化~~~本地快取

小程式效能優化~~~本地快取

什麼是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();
    }
    }