18

たとえばSingleton、静的フィールドを持つクラスがありますinstance

public class Singleton {

    private static Singleton instance;

    // other code, construct, getters, no matter    
}

2 つの異なるクラスローダーを使用して、このクラスを 2 回ロードできます。どうすれば回避できますか?安全ではなく、危険です。

また、インスタンスを null に設定すると、両方のクラスで null に設定されますか?

Singleton singleton = Singleton.getInstance();
singleton = null;
4

2 に答える 2

29

クラスローダー全体で trueSingletonが必要な場合は、問題のクラスをロードするための共通の親が必要になるか、クラスローダーを自分で指定する必要があります。

更新:以下の @Pshemo からのコメントから、以下のブログのコンテンツのかなりの部分がJavaWorld Articleから直接来ている可能性があります。まだ誰かを助けるかもしれないので、私はブログエントリを残しましたが、コンテンツがどこから来たのかを知る価値があります.

オリジナル:これを行う方法を提供するブログエントリ があります" (ただし、試したことはありません!)、かなり合理的に見えます。

以下に要求されているように、上記のリンクからのコード スニペットです。完全なコンテキストについては、ブログにアクセスすることをお勧めします。

private static Class getClass(String classname) throws ClassNotFoundException {
    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    if(classLoader == null) 
        classLoader = Singleton.class.getClassLoader();
      return (classLoader.loadClass(classname));
}
于 2013-03-01T11:53:39.153 に答える