使用方法
ThreadLocal<String> localName = new ThreadLocal();
localName.set("test");
String name = localName.get();
localName.remove();
public void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) { map.set(this, value); } else { createMap(t, value); } } 可以看到set 把当前线程作为key 每个线程都会维护一个自己的threadlocal放在堆中并非栈中 key被设计成WeakReference弱引用了,弱引用在gc 的时候都会被回收 而value 没有释放的话,,比如线程池一直占有threadlocal变量会导致value无法被回收,内存泄漏,需要手工删除
map.remove();