C/C++教程

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

 

这篇关于threadlocal 详解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!