2012-11-01 6 views
8

mi sono imbattuto nel seguente nota in java.lang.Class.newInstance0() in JDK 1.7 Update 7:Perché java.lang.Class.newInstance0() non è strettamente corretto nel modello di memoria java?

NOTA: il seguente codice può non essere strettamente corretto sotto l'attuale modello di memoria di Java.

Qualcuno può spiegare perché?

+0

potresti per favore citare il relativo "codice seguente"? – Vlad

+0

Ho trovato la nota (grazie a google) http://cr.openjdk.java.net/~jrose/7030453/webrev.00/raw_files/new/src/share/classes/java/lang/Class.java – Augusto

+0

tipo di DCL? http://www.javaworld.com/jw-02-2001/jw-0209-double.html – Flot2011

risposta

5

L'unico problema in questo codice che posso vedere è che il campo "cachedConstructor" è volatile, mentre garantisce l'effetto di visibilità del valore tra i thread, questo particolare blocco di codice ha una stranezza che thread diversi potrebbero vedere cachedConstructor come null prima del valore sarà assegnato da uno dei thread, cioè la sequenza di inizializzazione non è atomica. Questo può solo far sì che il CachedConstructor possa essere assegnato un paio di volte simultaneamente, ma non infrangerà il codice se nessuno si affida specificamente che sarà la stessa istanza del Costruttore. Se il blocco di inizializzazione del CachedConstructor fosse sincronizzato, allora sarà atomico, cioè il CachedConstructor assegnato una sola volta indipendentemente dalle condizioni della competizione.

Detto questo, il codice dovrebbe funzionare correttamente, ma consente solo il contemporaneo ricalcolo eccessivo del valore memorizzato nella cache da più di un thread.

+0

Quindi suppongo che l'autore del commento avrebbe dovuto essere un po 'più chiaro in quella nota. Grazie per il chiarimento. – SpaceTrucker

1

l'attuale modello di memoria Java

La domanda è: "come corrente".

Questo pezzo di codice è probabilmente molto antico, 1.4 o precedente, e nessuno lo ha più toccato da allora.

L'autore era probabilmente consapevole del fatto che era stato elaborato un nuovo modello di memoria.

Problemi correlati