Я хочу использовать InheritableThreadLocal для хранения некоторых переменных.Поэтому я написал такой код:
public class ThreadContext
{
private static ThreadLocal current = new InheritableThreadLocal();
public static HashMap getContext()
{
if (current.get() == null) {
createContext();
}
return (HashMap) current.get();
}
public static void createNewContext(){
createContext();
}
public static IClientContext getClientContext()
{
return (IClientContext) ThreadContext.getContext().get("CLIENT_CONTEXT");
}
public static void setClientContext(IClientContext ctx) {
ThreadContext.getContext().put("CLIENT_CONTEXT", ctx);
}
private static void createContext()
{
current.set(new HashMap());
}
}
Но когда другой код вызывает getClientContext, иногда возникает NullPointerException:
java.lang.NullPointerException
at com.xxx.util.ThreadContext.getClientContext(ThreadContext.java:19)
Похоже, что getContext вернул нулевое значение.Но в getContext он не может вернуть ноль.Потому что, если get возвращает null, он создаст новый.
public static HashMap getContext()
{
if (current.get() == null) {
createContext();
}
return (HashMap) current.get();
}
Кто-нибудь сталкивался с этой проблемой раньше?Или есть идеи?