美文网首页
ThreadLocal原理

ThreadLocal原理

作者: wbpailxt | 来源:发表于2020-03-11 12:25 被阅读0次
Thread,ThreadLocalMap,ThreadLocal三者关系 ThreadLocalMap

ThreadLocalMap是每个线程Thread类里的变量,里面最重要的属性是一个键值对数组Entry[] table,可以认为是一个map,键值对:

  • 键:这个ThreadLocal
  • 值:实际需要的变量,比如user或者simpleDateFormat

ThreadLocal的get方法


GC回收不了的value

内存泄露:某个对象不再有用,但是占用的内存却不能被回收。
强引用:就是我们声明变量并指向一个对象--Object a = new Object;
什么样的对象会被回收:没有引用关联或者只被弱引用关联。
正常情况下,线程终止,该线程内的所有引用会被置为null,ThreadLocalMap的key和value一个是弱引用,一个是没有引用关联,都可以被垃圾回收。
但是线程不终止(比如线程需要保持很久),那么key对应的value就不能被回收,因为有以下调用链:


调用链

remove方法可以将entry的引用置为null,那么entry整个对象都会被回收,此时对应entry的value没有任何强引用了,也会被回收。


threadlocal的remove()方法
所以我们需要在使用完threadlocal之后,调用remove方法,这也是阿里规约所规定的。

相关文章

网友评论

      本文标题:ThreadLocal原理

      本文链接:https://www.haomeiwen.com/subject/ruafjhtx.html