class MyClass
{
private static volatile Resource resource;
public static Resource getInstance()
{
if(resource == null)
resource = new Resource();
return resource;
}
}
ここで、Resourceが不変のクラスである場合、上記のコードを記述しても安全ですか?実際のJava同時実行の場合と同様に、「初期化の安全性により、適切に構築された不変オブジェクトをスレッド間で安全に共有できます。したがって、上記のコードは安全に記述できます」と述べられています。(ページ番号349 16.3)。しかし、これを使用すると、2つのスレッドがnullをチェックし、クラスの不変条件(シングルトン)に反するオブジェクトの作成に進むことができる場合があります。説明してください。リンクの質問の続き