资料参考
网上介绍ThreadLocal原理的文章很多。
原理、源码方面 史上最全ThreadLocal 详解(一)-CSDN博客
使用方面 https://www.cnblogs.com/aaacarrot/p/17262135.html
内存泄漏方面 ThreadLocal内存泄漏及弱引用的理解-CSDN博客
一篇文章,从源码深入详解ThreadLocal内存泄漏问题 - 简书
这篇讲的细,从源码讲弱引用及其回收
图多丰富 ThreadLocal原理剖析_threadlocal 剖析-CSDN博客
ThreadLocal概要重点
前面先放的是一些优秀总结,可以根据索引查阅。
这里开始正文,主要是简单总结一些要点,作为使用的注意事项。
1 什么是ThreadLocal及其使用场景
ThreadLocal是线程的私有本地变量,设定和查询都是在当前线程内的。
ThreadLocal 适用于如下两种场景
- 每个线程需要有自己单独的实例
- 实例需要在多个方法中共享,但不希望被多线程共享
那么,有几个场景就很适合来使用ThreadLocal
1 是用户认证。
2 是数据库连接。
3 是数据跨层传递。
4 是使用ThreadLocal解决线程安全问题
5 链路Trace
ThreadLocal的清理
重要的几点
- 线程不死 threadlocal不死。虽有弱引用及set、get动作时有清理,但一些复杂情况下线程池内线程可能有一些逻辑导致threadlocal一直不能被回收。
- 拦截器拦截住网络请求,每次拦截即覆写信息,即每次拦截即做了回收清理。
- 有些场景需要在很多方法透传一些后增的信息,这些不是全局需要的,这种情况需要注意用完自行remove。