聊聊 ThreadLocal 吧

Posted 89564f

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了聊聊 ThreadLocal 吧相关的知识,希望对你有一定的参考价值。

ThreadLocal其实就是「线程本地变量」,他会在每个线程都创建一个副本,那么在线程之间访问内部副本变量就行了,做到了线程之间互相隔离。

 

  • ThreadLocal 有一个「静态内部类 ThreadLocalMap」,ThreadLocalMap 又包含了一个 Entry 数组,「Entry 本身是一个弱引用」,他的 key 是指向 ThreadLocal 的弱引用,「弱引用的目的是为了防止内存泄露」,如果是强引用那么除非线程结束,否则无法终止,可能会有内存泄漏的风险。

  • 但是这样还是会存在内存泄露的问题,假如 key 和 ThreadLocal 对象被回收之后,entry 中就存在 key 为 null ,但是 value 有值的 entry 对象,但是永远没办法被访问到,同样除非线程结束运行。「解决方法就是调用 remove 方法删除 entry 对象」

 

以上是关于聊聊 ThreadLocal 吧的主要内容,如果未能解决你的问题,请参考以下文章

来聊聊ThreadLocal内存泄露分析

Java——聊聊JUC中的ThreadLocal

Java——聊聊JUC中的ThreadLocal

来聊聊ThreadLocal内存泄露分析

知道ThreadLocal吗?一起聊聊到底有啥用

聊聊ThreadLocal原理以及使用场景-JAVA 8源码