1. 首页
  2. 编程面试题
  3. Java
  4. 并发多线程

谈一谈对 ThreadLocal线程共享的理解 ?



1.ThreadLocal 可以实现资源对象的线程隔离,让每个线程各用各的资源对象,避免争用引发的线程安全问题

2.ThreadLocal 同时实现了线程内的资源共享

3.其原理是,每个线程内有一个 ThreadLocalMap 类型的成员变量,用来存储资源对象
- 调用set方法,就是以 ThreadLocal 自己作为 key,资源对象作为 value ,放入当前线程的 ThreadLocalMap 集合中
- 调用 get 方法,就是以 ThreadLocal 自己作为 key ,到当前线程中查找关联的资源值
- 调用 remove 方法,就是以 ThreadLocal 自己作为 key,移除当前线程关联的资源值

4.为什么 ThreadLocalMap 中的 key 要设计为弱引用?
- Thread 可能需要长时间运行(如线程池中的线程),如果 key 不再使用,需要在内存不足时(GC)释放其占用的内存
- 但 GC 仅是让 key 的内存释放,后续还要根据 key 是否为 null 来进一步释放值的内存,释放时机有
a. 获取 key 发现为 null
b. set key 时,会使用启发式扫描,清除临近的 null key,启发次数与元素个数,是否发现 null key 有关
c. remove 时(推荐),因为一般使用 ThreadLocal 时都把它作为静态变量,因此 GC 无法回收

精品推荐


GPT-4 Plus账号大大大降价了!
免费AI写作工具!

发布者:admin,如若转载,请注明出处:https://ai1024.vip/42956.html

QR code
//