本文章在于简要介绍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来曾删改查数据的。