美文网首页js css html
说说ThreadLocal原理?

说说ThreadLocal原理?

作者: 嘘寒问暖 | 来源:发表于2022-04-18 17:14 被阅读0次

    ThreadLocal可以理解为线程本地变量,它会在每个线程都创建⼀个副本,那么在线程之间访问内部副本变量就⾏了,做到了线程之间互相隔离,相⽐于synchronized的做法是⽤空间来换时间。

    ThreadLocal内,有⼀个静态内部类:ThreadLocalMap,ThreadLocalMap⼜包含了⼀个Entry数组,Entry本身是⼀个弱引⽤,它的key是指向ThreadLocal的弱引⽤,Entry具备了保存key—value键值对的能⼒。

    弱引⽤的目的是为了防⽌内存泄露,如果是强引⽤那么ThreadLocal对象除⾮线程结束后,则始终⽆法被回收,弱引⽤则会在下⼀次GC的时候被回收。

    但是,这样还是会存在内存泄露的问题,假如key和ThreadLocal对象被回收之后,entry中就存在key为空,但是value有值的entry对象,但是永远没办法被访问到,同样除⾮线程结束运行。

    但是只要ThreadLocal使⽤恰当,在使⽤完之后调⽤remove⽅法删除Entry对象,实际上是不会出现这个问题的。

    ThreadLocal引用原理

    相关文章

      网友评论

        本文标题:说说ThreadLocal原理?

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