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

posted @ 2021-08-19 10:50  mcalex  阅读(29)  评论(0编辑  收藏  举报