1. 程式人生 > >ThreadLocal類簡單介紹

ThreadLocal類簡單介紹

在之前的部落格中提到過很多次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());
    }
}