ThreadLocal類簡單介紹
阿新 • • 發佈:2018-11-20
在之前的部落格中提到過很多次ThreadLocal類今天對它簡單的說一下
- ThreadLocal,顧名思義是執行緒的一個本地化物件,當工作於多執行緒中的物件使用ThreadLocal維護變數時,ThreadLocal為每個使用該變數的執行緒分配一個獨立的變數副本,所以每一個執行緒都可以獨立的改變自己的副本,而不影響其他執行緒所對應的副本。從執行緒的角度看,這個變數就像是執行緒的本地變數。ThreadLocal為解決多執行緒程式的併發問題提供了一種新的思路。
- ThreadLocal類非常簡單好用,只有四個方法,能用上的也就是下面三個方法:
① void set():設定當前執行緒的執行緒區域性變數的值。
② get():獲得當前執行緒所對應的執行緒區域性變數的值。
③ void remove():刪除當前執行緒中執行緒區域性變數的值。 - ThreadLocal是如何做到為每一個執行緒維護一份獨立的變數副本的呢?在ThreadLocal類中有一個Map,鍵為執行緒物件,值是其執行緒對應的變數的副本,自己要模擬實現一個ThreadLocal類其實並不困難,程式碼如下所示:
public class MyThreadLocal<T> { private Map<Thread, T> map = Collections.synchronizedMap(new HashMap<Thread, T>()); public void set(T newValue) { map.put(Thread.currentThread(), newValue); } public T get() { return map.get(Thread.currentThread()); } public void remove() { map.remove(Thread.currentThread()); } }