単一例--ネット世界の計画出産
4014 ワード
一例として、一つのプロセス空間では、一つのクラスは一つのオブジェクトしか生成できません。
ここにプロセスの概念を追加しました。プロセスを超えて言えば、単なる例です。意味がありますか?普通はないです。しかし、拡張編では特別なエピソードを話します。
最も簡単な実現は、基本的な1行のコードで解決できます。
V 1.0
ここにプロセスの概念を追加しました。プロセスを超えて言えば、単なる例です。意味がありますか?普通はないです。しかし、拡張編では特別なエピソードを話します。
最も簡単な実現は、基本的な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 3public static SingleInstance getInstance() {
return InstanceHolder.instance;
}
private SingleInstance () {
}
private static class InstanceHolder {
public static volatile SingleInstance instance = new SingleInstance();
}
もっと なのがありますか?
V 3public enum SingleInstance {
INSTANCE;
private SingleInstance () {
}
public static SingleInstance getInstance() {
return INSTANCE;
}
private int field1;
private int field2;
public void test() {
}
}
classをenumに えて、 で を します。
な はまずここに てください。インターネットの も いので、 は を してみます。
: がありますが、 ではどうすればいいですか?パラメータが いていますが、どうすればいいですか?