ThreadLocal本质及脏数据、内存泄漏问题

 我来答
深空游戏
2023-06-28 · 百度认证:东莞市深空信息咨询官方账号
深空游戏
向TA提问
展开全部

1、但是普通的ThreadLocal在创建新线程后信息会完全丢失,笔者曾经在这里踩到过坑。

2、这就导致,下次如果Dubbo处理响应恰好继续使用到这个线程,该线程就能调用到上次响应中设置在ThreadLocal设置的值。这就引起内存泄露,可能还会导致业务上异常。

3、在这个情况下,存在一个线程访问或者修改另一个线程的数据的可能性。当数据不允许这样共享的时候,我们应该做成线程安全的。

4、)方法,在remove和set方法中都会调用这个方法。ThreadLocal为了避免内存泄露,不仅使用了弱引用维护key,还在每个操作上检查key是否被回收,进而再回收value。

5、因此为了避免value内存泄露,我们需要在ThreadLocal不需要的时候主动remove掉。ThreadLocal通过自身的threadLocalHashCode来碰撞得到自己在ThreadLocalMap的table里的索引i。因此这个threadLocalHashCode就十分重要了。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式