シングルトンがシングルトンでない場合について説明したブログを読んでいました。
著者が説明しようとしているケースの 1 つは、Singleton に実装されている場合にダブル チェック ロックが失敗する可能性があることを示しています。
// Double-checked locking -- don't use
public static MySingleton getInstance() {
if (_instance==null) {
synchronized (MySingleton.class) {
if (_instance==null) {
_instance = new MySingleton();
}
}
}
}
上記のコード ブロックについて、著者は次のように述べています。
「この状況では、メソッドが呼び出されるたびにシングルトン クラスのロックを取得する費用を回避するつもりです。ロックは、シングルトン インスタンスが存在しない場合にのみ取得され、インスタンスの存在が再度チェックされます。別のスレッドが現在のスレッドの直前に最初のチェックに合格した場合。」
誰かがこれが何を意味するのかを説明するのを手伝ってもらえますか?