ThreadLocal 的个人理解
ThreadLocal 是一个经常出现在线程安全里面的类。其主要作用是为每个线程保存自己的独享变量。以下内容,简单从其数据结构,重要的方法,作用来介绍下这个类。
定义:线程的变量副本,实现线程隔离。
1. 应用场景:线程安全的日志类:

2.从main方法开始,ThreadLocal 的使用过程:set 才能有值,或者 withInitial 方法,不能remove
private static ThreadLocal<String> threadLocal1 = new ThreadLocal<>();
private static ThreadLocal<Integer> threadLocal2 = ThreadLocal.withInitial(() -> 1000);
public void set(T var1) {
Thread var2 = Thread.currentThread(); // threadID
ThreadLocal.ThreadLocalMap var3 = this.getMap(var2); // threadLocal1--->threadID
if (var3 != null) {
var3.set(this, var1);
} else {
this.createMap(var2, var1);
}
}
public T get() {
Thread var1 = Thread.currentThread();
ThreadLocal.ThreadLocalMap var2 = this.getMap(var1);
if (var2 != null) {
ThreadLocal.ThreadLocalMap.Entry var3 = var2.getEntry(this);
if (var3 != null) {
Object var4 = var3.value;
return var4;
}
}
return this.setInitialValue();
}
3. new Thread 的时候,怎么成功 ”初始化“ ThreadLocal



4. 结构图

ThreadLocal 是通过“继承”来给子线程传递的,每次调用的时候,判断有没有值,没有的话,使用默认值。
好用,慎用,嘿嘿