java - 为什么Java中ThreadLocal只有threadLocalHashcode

标签 java

今天,当我将应用程序调试到 RequestContext putLoginId 方法时,我发现类 static ThreadLocal 初始失败,contextData.get() 返回 null,仅静态 contextData有threadLocalHashCode。

enter image description here

我的contextDataRequestContext类中定义如下:

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/

相关文章:

java - Java 泛型中的错误 - 所需类型 : List<MyClass> Provided: List<T>

java - 带有 Couchbase 服务的 Spring WebMVC - 没有可用的名为 'couchbaseRepositoryOperationsMapping' 的 bean

java - 从 MongoDB 中选择随机键

java - 如何避免创建多余的实体?

Java 和 JavaScript 直接通信

java - 如何使用 scrollPane JavaFX 显示大于屏幕的图像

java - 使用基于 java 的电子邮件过滤器的 SenderID 验证

java - 爆炸性的ROOT.war

java - 如何在java中链接ghost脚本来减小PDF大小?

java - Java 8 收集器问题类型不匹配 : cannot convert from List<Object> to List<String>