このブログでは:
リスト 10 のコードは同期を使用せず、静的な getInstance() メソッドが呼び出されるまで Singleton オブジェクトが作成されないようにします。
上記の引用は間違っていませんか?getInstance()
静的オブジェクトはクラスの早い段階で初期化されるため、静的メソッドが呼び出されるまでオブジェクトが作成されないのはなぜですか?
質問で参照されているコードは、基本的に次のとおりです。
class Singleton {
private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
インスタンスは遅延初期化されず、クラスのロード時に一度インスタンス化されるため、これはスレッドセーフです。
クラス・ローダーは、クラスの初期化がスレッドセーフであることを保証するために、独自の同期を強制します。