threadlocal 详解
作者:互联网
使用方法
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();
标签:map,set,value,threadlocal,详解,线程,localName 来源: https://www.cnblogs.com/jiangvtn/p/16146342.html