本文章在於簡要介紹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來曾刪改查數據的。