Entsprechend dieser post sollte die threadsichere Singleton-Klasse wie folgt aussehen. Aber ich frage mich, ob es notwendig ist volatile
Schlüsselwort zu static CrunchifySingleton instance
Variable hinzuzufügen. Da, wenn die Instanz erstellt und im CPU-Cache gespeichert wird und zu diesem Zeitpunkt nicht in den Hauptspeicher zurückgeschrieben wird, wird unter der Methode getInstance()
ein anderer Thread aufgerufen. Wird es zu einem Inkonsistenzproblem kommen?Muss ein flüchtiges Schlüsselwort hinzugefügt werden, um threadsichere Singleton-Klassen in Java zu garantieren?
public class CrunchifySingleton {
private static CrunchifySingleton instance = null;
protected CrunchifySingleton() {
}
// Lazy Initialization
public static CrunchifySingleton getInstance() {
if (instance == null) {
synchronized (CrunchifySingleton.class) {
if (instance == null) {
instance = new CrunchifySingleton();
}
}
}
return instance;
}
}
Lazy initialisierte Singletons sind eine Verschwendung; Singletons im Allgemeinen sind eine schlechte Idee.Google hat Software geschrieben, um sie für die Entfernung aus ihrem Code zu identifizieren. Warum benutzt du sie? – duffymo