美文网首页
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