(ウィキペディアより)
//遅延初期化:
public class Singleton {
private static volatile Singleton instance = null;
private Singleton() { }
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class){
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
//熱心な初期化:
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
「プログラムがクラスを使用しているが、おそらくシングルトン インスタンス自体を使用していない場合は、遅延初期化に切り替えることをお勧めします。」
1 - わかったかどうかわからない。プログラムでクラスを使用してはいけないのはなぜですか? 属性/メソッドを追加するだけでは解決できないのはなぜですか? それに関して、定数参照はどのように変更する必要がありますか?
2 - 遅延初期化 - コード ブロックではなく getInstance() を同期する (ダブル チェックを取り除く) と、マルチスレッドが発生すると、プログラムにどのような影響がありますか?
ありがとうございました。