以下のように宣言されているメソッドがいくつかあります。
このクラスは、コンテナからコンポーネントThreadLocal
を取得するために使用するために宣言されています。Service
public class ThreadContext {
private Connector connector;
private static ThreadLocal threadLocal = new ThreadLocal() {
@Override
protected Connector initialValue() {
Service service =
(Service) Container.getComponentInstanceOfType(Service.class);
Connector connector = service.getConnector();
return connector;
}
};
public static Connector get() {
return Connector threadLocal.get();
}
}
中流Connector
階級です
public class Connector {
public Collection<Result> search() {
User user = ConversationUser.getCurrent()
}
}
も使用するConversationUser
ことが宣言されていますThreadLocal
public class ConversationUser {
private static ThreadLocal<ConversationUser> current =
new ThreadLocal<ConversationUser>();
public static ConversationUser getCurrent() {
return current.get();//(1)
}
}
次に、以下のように何かをするスレッドを書きます。
Thread thread = null;
thread = new Thread(new Runnable() {
public void run(){
ThreadContext context = new ThreadContext();
Collection<Result> result = context.get().search();//(2)
resultsTemp.put("File", result);
}
});
thread.start();
このスレッドは正常に機能しますがNullPointerException
、行 (2) で発生します。私が調査したように、メソッドは行(1)で null を返します。
それは私にとって本当に混乱しています。問題が発生する理由がわかりません。これについていくつか説明をお願いします、ありがとう。