背景知识
- 整理写过关于ThreadLocal的相关文档。
- 写了这么多文档,学到了什么?
过程
- 文档入口
- ThreadLocal:基础知识及其应用
- ThreadLocal:内存泄漏分析及其解决方案
- ThreadLocal:在线程池中使用存在的问题及其解决方案
- ThreadLocal:工作过程
- ThreadLocal源码阅读:散列算法,魔数 0x61c88647 学习
- ThreadLocal源码阅读:如何保证取到最新值的?
- ThreadLocal源码阅读:散列算法,魔数 0x61c88647 带来的疑问与思考
- ThreadLocal源码阅读:如何解决hash碰撞的?
- ThreadLocal源码阅读:核心方法set源码探究
- ThreadLocal源码阅读:核心方法get源码探究
- ThreadLocal源码阅读:核心方法remove源码探究
- ThreadLocal:问题及其理解汇总
- 学到什么
-
完美的均匀的散列算法,threadLocalHashCode & (length - 1)。
-
环形数组理解和灵活应用。
-
扩容逻辑理解。
-
弱引用垃圾收集过程,不关心是否内存充足,直接回收。
-
线性探测解决hash碰撞。
-
hash碰撞分析过程。尤其是环形数组和弱引用ThreadLocal对碰撞概率的影响。
-
内存泄漏的分析过程。
-
对探索过程的练习,从基础知识,注意事项,工作过程,源码剖析,背后设计的意图。层层递进的思维方式。
小结
- 以后写代码,要学以致用,把ThreadLocal源码中用到的思想和技术,完全拿到自己项目中使用,不能生搬硬套,而是灵动地使用它,才是学这个知识点的最大收获。
- 添加弱引用对象的保护机制。
- 使用环形数组。节约空间,在容器中使用,还可以减少扩容频次。
- 使用线性探测解决hash碰撞思路。
- 自定义容器map,自定义Entry存放具体数据。