Head Firstデザイン パターン ブックから、ダブル チェック ロックを使用したシングルトン パターンが以下のように実装されました。
public class Singleton {
private volatile static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
が使われている理由がわかりませんvolatile
。volatile
使用法は二重チェック ロックを使用する目的、つまりパフォーマンスを無効にしません か?