天天看點

并發程式設計處理實戰篇9:線程本地變量ThreadLocal

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() 将目前線程局部變量的值删除,目的是為了減少記憶體的占用