谈谈你对ThreadLocal的理解
1、ThreadLocal可以实现【资源对象】的线程隔离,每个线程各用各的【资源对象】,避免争用引发的线程安全问题
2、ThreadLocal同时实现了线程内的资源共享
3、每个线程内有一个ThreadLocalMap类型的成员变量,用来存储资源对象
- 调用set方法,就是以ThreadLocal自己作为key,资源对象作为value,放入当前线程的ThreadLocalMap集合中
- 调用get方法,就是以ThreadLocal自己作为key,到当前线程中查找关联的资源值
- 调用remove方法,就是以ThreadLocal自己作为key,移除当前线程关联的资源值
4、ThreadLocal内存泄漏问题
- ThreadLocalMap 中的key是弱引用,值为强引用;key会被GC释放内存,关联value的内存并不会释放。建议主动remove释放key,value