其他分享
首页 > 其他分享> > threadlocal 详解

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