美文网首页
ThreadLocal总结

ThreadLocal总结

作者: 不要夜空霓虹的繁荣 | 来源:发表于2021-06-07 20:34 被阅读0次

    1.什么是ThreadLocal

    它是一个本地线程副本变量的工具,用于私有线程和该线程存放的副本对象做一个映射,实现多个线程之间的变量互不干扰。

    2.ThreadLocal 工作原理是什么?

    每一个线程都会有一个ThreadLocalMap,他是(key,value)格式,他的key是一个弱引用,也就是ThreadLocal本身,而他的value就是存储的副本变量,也就是说,ThreadLocal并不参与存储变量,而是作为一个工具,用来维护线程中的Map,帮助它存取变量。

    3.ThreadLocal 如何解决 Hash 冲突

    ThreadLocal和HashMap不一样,并不是利用链式结构去解决hash冲突,而是采用线性探测的方式。所谓线性探测,就是根据初始 key 的 hashcode 值确定元素在 table 数组中的位置,如果发现这个位置上已经被其他的 key 值占用,则利用固定的算法寻找一定步长的下个位置,依次判断,直至找到能够存放的位置。

    4.ThreadLocal 的内存泄露是怎么回事?

    因为ThreadLocalMap 的key是弱引用,当JVM进行垃圾回收时会把key回收掉,而map的value是强引用,JVM无法回收它,就会一直储存在内存中,因而导致内存泄漏。

    5.为什么 ThreadLocalMap 的 key 是弱引用

    如果是强引用,ThreadLocal对象被回收时,由于ThreadLocalMap还保持强引用,如果不进行手动回收,还是会导致内存泄漏,而是弱引用的话,在调用set,get,remove的时候会被清除。

    6.ThreadLocal 的应用场景有哪些

    适用于独立变量副本的情况,比如Hibernate的session获取场景。

    相关文章

      网友评论

          本文标题:ThreadLocal总结

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