我遇到了这个超级奇怪的 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类导入的)
我想堆栈跟踪中的行号是正确的吗? 有什么想法吗?谢谢
感谢@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);