Inner synchronization on the same object as the outer synchronization
java, multithreading, synchronization
Solution
In the old Java Memory Model (JMM), exiting a `synchronized` block allegedly flushed local data out to main memory. Entering a `synchronized` block used to cause rereading of cached data. (Here, cache includes registers with associated compiler optimisations.) The old JMM was broken and not implemented correctly.
In the new JMM it doesn't do anything. New JMM is specified for 1.5, and implemented for the "Sun" 1.4 JRE. 1.5 completed it's End of Service Life period some time ago, so you shouldn't need to worry about the old JMM (well, perhaps Java ME will do something unpredictable).
Problem
Recently I attended a lecture concerning some design patterns: The following code had been displayed: ``` 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; } ``` taken from: Double-checked locking: Take two My question has nothing to do with the above mentioned pattern but with the synchronized blocks: Is there any benefit whatsoever to the double synchronization done in lines 1 & 3 with regards to the fact that the synchronize operation is done on the same Object?