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();

 

posted @ 2022-04-14 20:19  枫叶啊枫叶  阅读(48)  评论(0)    收藏  举报