単一例--ネット世界の計画出産

4014 ワード

一例として、一つのプロセス空間では、一つのクラスは一つのオブジェクトしか生成できません。
ここにプロセスの概念を追加しました。プロセスを超えて言えば、単なる例です。意味がありますか?普通はないです。しかし、拡張編では特別なエピソードを話します。
最も簡単な実現は、基本的な1行のコードで解決できます。
V 1.0
public static final SingleInstance instance = new SingleInstance();

private SingleInstance () {
    
}
き わったら、 に にいくつかの を くことができます。
1.スレッドの では、オブジェクトは つしか できませんか?はい、プライベートのコンストラクタが するため、 のクラスはこのオブジェクトを できません。
2. がいいですか?えっと、そうではないようです。クラスをロードすると、このオブジェクトが されます。 ロードポリシーに していないので、メモリと の があります。
3. のスレッドは ですか?はい、そうです。なぜ かるのですか?
に って、クラスをロードする 、 があって、 のスレッドが じクラスをロードするのを して、 じクラスが します。
そこで、 しました。
V 2.
public static volatile SingleInstance instance = null;
public static SingleInstance getInstance() {
    if( instance == null) {
        synchronized (SingleInstance.class) {
            if( instance == null) {
                instance = new SingleInstance();
            }
        }
    }
    return instance;
}

private SingleInstance () {
}
じ の は OKのようです。
なのがありますか?
V 3
public static SingleInstance getInstance() {
   
    return InstanceHolder.instance;
}

private SingleInstance () {
}

private static class InstanceHolder {
    public static volatile SingleInstance instance = new SingleInstance();
}
もっと なのがありますか?
V 3
public enum  SingleInstance {

    INSTANCE;

    private SingleInstance () {
    }

    public static SingleInstance getInstance() {
        return INSTANCE;

    }


    private int field1;
    private int field2;

    public void test() {

    }

}
classをenumに えて、 で を します。
な はまずここに てください。インターネットの も いので、 は を してみます。
: がありますが、 ではどうすればいいですか?パラメータが いていますが、どうすればいいですか?