PS:
關于多線程共享變量ThreadLocal<T>
變量值的共享可以使用public static 變量的形式,所有的線程都可以使用同一個public static變量。如果想實作每一個線程都有自己的共享變量,如何實作?
JDK中提供了類ThreadLocal<T>可以解決這樣的問題。
原理:
ThreadLocal所屬包java.lang.ThreadLocal<T> 是個泛型class
ThreadLocal為解決多線程并發問題提供了新的思路,使用這個類庫可以簡潔的實作多線程程式,
當使用ThreadLocal維護變量時,ThreadLocal為每一個使用該變量的線程提供獨立的變量副本,是以沒一個線程都可以改變自己的副本,而不會影響到其他線程對于的變量副本。
從線程的角度看,目标變量就象是線程的本地變量,這也是類名中“Local”所要表達的意思。
ThreadLocal為每一個線程維護變量的副本的原理:在ThreadLocal類中有一個Map集合,用于存儲每一個線程的變量副本,Map中元素的鍵為線程對象,而值對應線程的變量副本,檢視ThreadLocal的源碼可以看到
其開放的方法主要有:
public T get() 傳回目前線程所對應的線程局部變量。
public void set(T value) 設定目前線程的線程局部變量的值。
public void remove() 将目前線程局部變量的值删除,目的是為了減少記憶體的占用