今天,当我将应用程序调试到 RequestContext
putLoginId 方法时,我发现类 static ThreadLocal 初始失败,contextData.get()
返回 null,仅静态 contextData有threadLocalHashCode。
我的contextData
在RequestContext
类中定义如下:
public class RequestContext {
public static final ThreadLocal<Map<String, Object>> contextData = new ThreadLocal<>();
}
contextData
应该在加载类时初始化,所以我认为它永远不会为空。但为什么会发生这种情况以及我应该采取什么措施来解决它?我错过了什么吗?
最佳答案
the contextData should be initialed when load the class, so I think it will never be null
contextData
在类加载时初始化;但您实际上并没有给它一个(每个线程)值,至少在所示的代码中是这样。
用工厂方法给你的ThreadLocal
一个初始值,例如:
public static final ThreadLocal<Map<String, Object>> contextData =
ThreadLocal.withInitial(HashMap::new);
关于java - 为什么Java中ThreadLocal只有threadLocalHashcode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69159515/