Java併發:ThreadLocal

本文章在於簡要介紹ThreadLocal的作用

要點一: ThreadLocal類內部存在ThreadLocalMap靜態內部類,ThreadLocalMap本質上爲定製化的HashMap。

要點二: Thread類存在兩個ThreadLocalMap類型的變量,threadLocals 和inheritableThreadLocals ,默認值爲null

public
class Thread implements Runnable {
    ThreadLocal.ThreadLocalMap threadLocals = null;

    ThreadLocal.ThreadLocalMap inheritableThreadLocals = null;
}

要點三: ThreadLocal的set()方法

    public void set(T value) {
    	//獲取當前線程
        Thread t = Thread.currentThread();
        //獲取當前線程的threadLocals變量
        ThreadLocalMap map = getMap(t);
        if (map != null)
            map.set(this, value);
        else
            createMap(t, value);
    }

那我們就應該大概明白一下這段代碼的意思:

public class Test {
    public static ThreadLocal<String> threadLocal = new ThreadLocal<>();
    public static void main(String[] args) {
        new Thread(() -> {
          threadLocal.set("hello");
          System.out.println(threadLocal.get());
        }).run();
        new Thread(() -> {
          threadLocal.set("hi");
          System.out.println(threadLocal.get());
        }).run();
    }
}

ThreadLocal可以看成一個工具類,來給Thread中ThreadLocalMap來曾刪改查數據的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章