我们知道的是synchronized能够解决线程安全中的内存可见性问题(让每个线程读取到的变量一致),而ThreadLocal恰好相反,它是让每个线程都有处理任务过程中不同的值。
而我们通过代码发现他确实可以实现这样的功能
package executor;
/**
* @author tongchen
* @create 2023-02-10 22:48
*/
public class TestThreadLocal {
public static void main(String[] args) {
ThreadLocal<Integer> threadLocal = new ThreadLocal<>();
ThreadLocal<Integer> local = new ThreadLocal<>();
Thread t1 =new Thread(()->{
int count =30;
threadLocal.set(count);
System.out.println(threadLocal.get());
});
Thread t2 =new Thread(()->{
int count =35;
threadLocal.set(count);
System.out.println(threadLocal.get());
});
Thread t3 =new Thread(()->{
int count =40;
threadLocal.set(count);
System.out.println(threadLocal.get());
});
t1.start();
t2.start();
t3.start();
}
}
事实上,它是在底层维护了一个map,那作为map,他为什么创建时只传入一个参数呢?
我们通过观察源码发现,他的key事实上是当前线程