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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容