NullPointerException可能与InheritableThreadLocal有关

时间:2011-12-18 08:43:44

标签: java nullpointerexception thread-local

我想使用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中,它不能返回null。 因为如果get返回null,它将创建一个新的。

public static HashMap getContext()
{
    if (current.get() == null) {
        createContext();
    }
    return (HashMap) current.get();
}

之前有人遇到过这个问题吗?或任何想法?

0 个答案:

没有答案