ThreadLocal会copy一个变量副本放到当前线程中。
结构模型
每个线程都有
ThreadLocal.ThreadLocalMap threadLocals = null;
一、写操作
我们平常的业务代码里写的:
ThreadLocal<String> threadLocal = new ThreadLocal<>();
threadLocal.set("bike"+value);
threadLocal.set()方法底层的操作:
ThreadLocalMap类里面有个数组结构,用来存放当前ThreadLocal对象和value值关系
ThreadLocalMap.set()方法其实就是将当前声明的ThreadLocal对象做为key,真正要用的值的副本为value,存到当前线程的threadLocalMap的Entry数组内
二、读操作
ThreadLocal<String> threadLocal = new ThreaLocal();
threadLocal.get();
底层操作:
1、先获取当前线程上的ThreadLocalMap
2、以当前声明的threadLocal为key,遍历ThreadLocalMap下的Entry数组。
3、取出Entry数组内符合的对象,然后取出value值返回。