のようなクラス定義があるとしましょう
public static class Bootstrapper {
public static final Object DEFAULT_VALUE = getDefaultValue();
private static Object getDefaultValue() {
if (DEFAULT_VALUE == null) {
return createValue(); // Not thread safe
}
return DEFAULT_VALUE;
}
}
メソッドはフィールドをcreateValue()
参照せず、それ以外の場合はクラスのコンストラクターでのみ呼び出され、スレッドセーフではありません。DEFAULT_VALUE
Bootstrapper
上記のコードに (プログラミング スタイル以外に) 何か問題はありますか? クラスの初期化のルールを考えると、おそらくスレッドセーフは問題ではありませんが、プログラマーが知っておくべき重要なことはありますか?