java面试-0312-ThreadLocal理解?场景?原理?
ThreadLocal 为每个线程提供独立变量副本,线程间互不干扰,确保线程安全。
用户信息上下文:控制层拦截请求的 token 并解析用户信息(如 UserContext)存入ThreadLocal,方便在其他层访问
数据库连接:维护线程独享的 Connection(如 JDBC),避免线程间冲突。
事务管理:存储事务上下文(如 Spring @Transactional),确保线程内事务在同一个线程中传播和一致性。
ThreadLocal通过(静态内部类)ThreadLocalMap实现线程间的数据隔离,ThreadLocalMap存储在Thread的threadLocals字段中。包含 Entry 数组(键为 ThreadLocal 弱引用,值为用户数据)。
线程调用ThreadLocal的set或get方法时,实际上是访问线程的ThreadLocalMap
