困难 · 高频 5/5

ThreadLocal 的原理和内存泄漏风险是什么?

ThreadLocal 把变量副本存在线程自己的 ThreadLocalMap 中,线程复用时如果没有 remove,value 可能长期挂在线程上造成内存泄漏。

简短答案

ThreadLocal 把变量副本存在线程自己的 ThreadLocalMap 中,线程复用时如果没有 remove,value 可能长期挂在线程上造成内存泄漏。

详细解析

每个线程都有 ThreadLocalMap,key 是 ThreadLocal 的弱引用,value 是业务对象。线程池中的线程生命周期很长,如果 key 被回收但 value 没清理,就可能产生脏数据或内存占用。

面试回答模板

我会说明 ThreadLocal 解决的是线程内隔离,不是跨线程共享。它的数据实际存在 Thread 对象里。在线程池场景用完必须 remove,避免复用线程时读到旧数据或造成 value 长期无法释放。

易错点

  • 只背结论,不解释原理和边界。
  • 忽略真实生产环境中的容量、延迟、一致性和失败重试。
  • 没有结合项目经验说明为什么这样设计。

常见追问

  • 这个方案在高并发下有什么风险?
  • 如果数据规模扩大十倍,你会如何调整?
  • 线上出现异常时,你会先看哪些指标?

相关题目

继续刷题
Java 并发编程 入门 ★★★

Java 并发编程

Java 并发编程 是 Java 并发编程 中需要重点复习的条目,已从金山文档目录导入,后续可在后台补充完整答案、代码示例和图片。