Aus dem Head First- Entwurfsmusterbuch wurde das Singleton-Muster mit doppelt überprüfter Verriegelung wie folgt implementiert:
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;
}
}
Ich verstehe nicht, warum volatile
verwendet wird. Besiegt die volatile
Verwendung nicht den Zweck der Verwendung von doppelt überprüftem Sperren, dh Leistung?