NPE 处于不可能的地方

问题描述 投票:0回答:1

我遇到了这个超级奇怪的 NPE:

技术异常:堆栈错误 #java.lang.NullPointerException 位于 包名.addTraceIdToThreadContext(XXX.java:115) at ...

111    public void addTraceIdToThreadContext(String traceId) {
      ...
114        if (nonNull(this.logContext)) {
115            this.logContext.setTraceId(traceId);
116        }
117    }

(感谢您的评论,XXX.java是单例的,应用程序(JBoss下的Web应用程序)不是多线程的,nonNull方法是从Objects类导入的)

我想堆栈跟踪中的行号是正确的吗? 有什么想法吗?谢谢

java nullpointerexception
1个回答
0
投票

感谢@tgdavies,我找到了原因。

在同一个类中,有一个方法可以将 logContext 设置为 null:

    public static SmaUtils getInstance(String moduleName) {
    ((SmaUtilsImpl) INSTANCE).logContext = null;
    ((SmaUtilsImpl) INSTANCE).moduleName = moduleName;
    return INSTANCE;
}

当第一个线程到达这两行之间时,第二个线程将 logContext 设置为 null:

114 if (nonNull(this.logContext)) {
115     this.logContext.setTraceId(traceId);
© www.soinside.com 2019 - 2024. All rights reserved.