Closed shiwenjie12 closed 5 years ago
他主要解决了jdk的 ThreadLocal内存泄露的问题,同时使用数组替代hashmap解决数据缓存的问题,详情请看这个分析 https://www.jianshu.com/p/3fc2fbac4bb7
@shiwenjie12
说实话我之前就怕你直接扔一个链接给我,文章是你写的都没问题。
希望看到的是自己对它的理解,比如你贴上代码指出哪里的可能会存在泄露,FastThreadLocal
又是怎么解决了这个问题。
这样对你自己理解也有好处,而不是看到其他人说 FastThreadLocal
比 ThreadLocal
更好就用它。
能用自己的语言解释一遍会更好。
抱歉啊,我之前没有解释清楚,我现在说下我的一点理解 原生的ThreadLocal在内部维护了一套ThreadLocalMap进行存储,而它的键是使用了弱引用,当它的键被回收的时候,那他的value也就无法被访问到了,从而导致内存泄漏问题,这个问题在很多框架中都被重写,包括netty、Lucene, 另一方面,关于ThreadLocal的获取value需要依赖于key的不断hash获取slot,而FastThreadLocal在初始化变量的时候,利用AtomicInteger计算出了一个全局变量的slot,从而直接获取table数组中的value,从而实现更快速的获取线程缓存的获取
@shiwenjie12
能谈谈为什么要用
FastThreadLocal
嘛?以及它相比ThreadLocal
的优势。