ThreadLocal本质及脏数据、内存泄漏问题
1个回答
展开全部
1、但是普通的ThreadLocal在创建新线程后信息会完全丢失,笔者曾经在这里踩到过坑。
2、这就导致,下次如果Dubbo处理响应恰好继续使用到这个线程,该线程就能调用到上次响应中设置在ThreadLocal设置的值。这就引起内存泄露,可能还会导致业务上异常。
3、在这个情况下,存在一个线程访问或者修改另一个线程的数据的可能性。当数据不允许这样共享的时候,我们应该做成线程安全的。
4、)方法,在remove和set方法中都会调用这个方法。ThreadLocal为了避免内存泄露,不仅使用了弱引用维护key,还在每个操作上检查key是否被回收,进而再回收value。
5、因此为了避免value内存泄露,我们需要在ThreadLocal不需要的时候主动remove掉。ThreadLocal通过自身的threadLocalHashCode来碰撞得到自己在ThreadLocalMap的table里的索引i。因此这个threadLocalHashCode就十分重要了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询