前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅谈ThreadLocal

浅谈ThreadLocal

原创
作者头像
code-x
发布2022-12-03 22:20:42
2620
发布2022-12-03 22:20:42
举报
文章被收录于专栏:code-xcode-x

ThreadLocal是为了避免共享, 避免锁竞争, 使用了空间换时间的思路

若使用Map, Thread做Key, 则回到了问题本身, 仍会发生锁竞争, 降低效率

所以数据实际上是存储在java.lang.Thread#threadLocals的 ThreadLocal相当于一个钥匙/桥梁去访问Thread内的数据

Q1: 为什么ThreadLocalMap中Entry的Key (ThreadLocal) 要设置成弱引用

如果ThreadLocal使用完了, 但是Entry的key仍引用着该对象, 会造成内存泄漏

Q2: 为什么ThreadLocalMap中Entry的Value (实际存储的对象) 不设置成弱引用

如果发生GC就将该对象回收, 那么会造成系统异常, 用户仍然可能使用这个值

如果key (ThreadLocal) 被回收了, value仍然存在, 就会造成内存泄漏, 所以需要每次使用完成后手动调用remove

ThreadLocal也会在查找Entry或Map扩容的时候清除无用的Entry (Key为null), 一定程度上避免内存泄漏

父子线程中如何共享数据 Thread内Thread#inheritableThreadLocals

ref https://www.51cto.com/article/679528.html

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ThreadLocal是为了避免共享, 避免锁竞争, 使用了空间换时间的思路
  • Q1: 为什么ThreadLocalMap中Entry的Key (ThreadLocal) 要设置成弱引用
  • Q2: 为什么ThreadLocalMap中Entry的Value (实际存储的对象) 不设置成弱引用
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档