Today when I debug my app into RequestContext
putLoginId method, I found the class static ThreadLocal initial failed, the contextData.get()
return null, the static contextData only have threadLocalHashCode.
My contextData
define in RequestContext
class like this:
public class RequestContext { public static final ThreadLocal<Map<String, Object>> contextData = new ThreadLocal<>(); }
the contextData
should be initialed when load the class, so I think it will never be null. But why this happening and what should I do to fix it? Am I missing something?
Advertisement
Answer
the contextData should be initialed when load the class, so I think it will never be null
contextData
is initialized when the class is loaded; but you don’t actually give it a (per-thread) value, at least in the code shown.
Give your ThreadLocal
an initial value with the factory method, for example:
public static final ThreadLocal<Map<String, Object>> contextData = ThreadLocal.withInitial(HashMap::new);