class MyClass
{
private static volatile Resource resource;
public static Resource getInstance()
{
if(resource == null)
resource = new Resource();
return resource;
}
}
ここで私の疑問は、揮発性を使用する場合、実際にはJavaの同時実行性によるものであり、安全な公開が行われます(つまり、参照が別のスレッドに表示されるとすぐにデータも利用可能になります)。じゃあここ使っていい?しかし、それが正しければ、thread1 が "resource" をチェックし、それが null であるため、オブジェクトの作成を開始するとします。スレッド 1 がオブジェクトを作成している間に、別のスレッド、つまりスレッド 2 が来て「リソース」の値のチェックを開始し、スレッド 2 がそれを null として検出します (「リソース」オブジェクトの作成にはかなりの時間がかかり、スレッド 1 がまだ作成を完了していないため、安全なパブリケーションが発生していないため、スレッド 2 では使用できません)では、オブジェクトの作成も開始されますか? はいの場合、クラスの不変条件が壊れます。私は正しいですか?ここでの volatile の特別な使用を理解するのを手伝ってください。