说说ThreadLocal原理?

源码 2024-9-13 22:51:54 37 0 来自 中国
ThreadLocal可以明白为线程本地变量,它会在每个线程都创建⼀个副本,那么在线程之间访问内部副本变量就⾏了,做到了线程之间相互隔离,相⽐于synchronized的做法是⽤空间来换时间。
ThreadLocal内,有⼀个静态内部类:ThreadLocalMap,ThreadLocalMap⼜包罗了⼀个Entry数组,Entry自己是⼀个弱引⽤,它的key是指向ThreadLocal的弱引⽤,Entry具备了生存key—value键值对的能⼒。
弱引⽤的目标是为了防⽌内存走漏,如果是强引⽤那么ThreadLocal对象除⾮线程竣过后,则始终⽆法被接纳,弱引⽤则会在下⼀次GC的时候被接纳。
但是,如许照旧会存在内存走漏的标题,如果key和ThreadLocal对象被接纳之后,entry中就存在key为空,但是value有值的entry对象,但是永久没办法被访问到,同样除⾮线程竣事运行。
但是只要ThreadLocal使⽤得当,在使⽤完之后调⽤remove⽅法删除Entry对象,现实上是不会出现这个标题的。
1.png
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-19 02:24, Processed in 0.156241 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表