Threadlocal 源码分析
Threadlocal 源码分析 public void set(T value) { //set 方法 Thread t = Thread.currentThread(); // 首先获取当前线程 ThreadLocalMap map = getMap(t); // 获取当前线程对应的ThreadLocalMap 其为Threadlocal的一个静态内部类(就是获取线程的ThreadLocalMap变量) // 每个线程都会维护这样的一个ThreadLocalMap变量 if (map != null) // 不为空 map.set(this, value); // 尝试设置此值(查看后面的private) else createMap(t, value); // 为空的话就创建一个Map 调用ThreadLocalMap的构造方法 } public T get() { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); // 获取当前线程和对应的map if (map != null) { ThreadLocalMap.Entry e = map.getEntry(this); // 获取当前key在当前map(此线程对应的map) 对应的Entry if (e != null) { @SuppressWarnings("unchecked") T result = (T)e.value; return result;// 返回值 } } return setInitialValue(); // 反回默认值 即返回空值null 也可以重写此方法返回一个默认的值 } public void remove() { ThreadLocalMap m = getMap(Thread.currentThread()); if (m != null) m.remove(this); // 直接调用map的remove方法即可 }
更多查看:https://baijiahao.baidu.com/s?id=1653790035315010634&wfr=spider&for=pc