快速理解ThreadLocal以及内存泄漏的问题

2022-05-20  本文已影响0人  一枚路过的程序猿
ThreadLocal.png

上图简单的描述了一下ThreadLocal内部,接下来简单读取一下源代码从而发现内存泄漏的问题


ThreadLocal set().jpg
ThreadLocal map.set.jpg
ThreadLocaMap.Entry.jpg

为什么要把Key作为弱引用呢?

ThreadLocal<Object> tl = new ThreadLocal<Object>();
tl.set("abc");
tl.remove();

若是用强引用,即使设置tl=null,但是key依然指向ThreadLocal对象,所以会有内存泄漏,弱引用不会
如果ThreadLocal对象被回收,会导致Key变为null,意味着永远访问不到key指定的value,所以还会产生内存泄漏的问题
因此在使用ThreadLocal的时候,如果一旦确认不再使用对象,要进行手动Threadlocal.remove()

上一篇 下一篇

猜你喜欢

热点阅读