ThreadLocal

ThreadLcoal:ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。

ThreadLocal的set方法:

 public void set(T value) {
        Thread t = Thread.currentThread();
        ThreadLocal.ThreadLocalMap map = getMap(t);
        if (map != null)
            map.set(this, value);
        else
            createMap(t, value);
    }

在Thread里面维护了一个ThreadLocalMap,set的值其实是放在map里面而不是放在ThreadLocal里面.

 

ThreadLocal的get方法:

 public T get() {
        Thread t = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        if (map != null) {
            ThreadLocalMap.Entry e = map.getEntry(this);
            if (e != null) {
                @SuppressWarnings("unchecked")
                T result = (T)e.value;
                return result;
            }
        }
        return setInitialValue();
    }

在每次使用完之后,都要remove,不这样的话会造成内存泄漏(不知道为什么,以后在研究);

原文地址:https://www.cnblogs.com/lzh66/p/12951046.html