Kürzlich besuchte ich einen Vortrag über einige Design-Muster:Inner Synchronisation auf das gleiche Objekt wie die äußere Synchronisation
Der folgende Code hatte angezeigt worden:
public static Singleton getInstance()
{
if (instance == null)
{
synchronized(Singleton.class) { //1
Singleton inst = instance; //2
if (inst == null)
{
synchronized(Singleton.class) { //3
inst = new Singleton(); //4
}
instance = inst; //5
}
}
}
return instance;
}
entnommen aus: Double-checked locking: Take two
Meine Frage hat nichts mit dem oben genannten Muster zu tun, sondern mit den synchronisierten Blöcken:
Gibt es irgendwelche Vorteile für die doppelte Synchronisation in den Zeilen 1 & 3 in Bezug auf die Tatsache, dass der Synchronisationsvorgang auf dem gleichen Objekt durchgeführt wird?
ok ... könnten Sie bitte erläutern? Ich kann immer noch nicht den Nutzen des Obigen bekommen. – Yaneeve
Bei der AFAIK-Synchronisierung wird immer noch gespült. (Siehe http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html#synchronization) –
Oh, ich habe gerade gemerkt, dass du über EXITING redest. Versäumt, dass –