2011-08-20 12 views
9

me pregunto si la escritura a una variable volátil obligará JVM para sincronizar todas las variables no volátiles de la memoria, así que por ejemplo, lo que ocurrirá en el siguiente código:¿Qué ocurre después de escribir en una variable volátil?

volatile int x; 
int y; 

y=5; 
x=10; 

x se escribirán en la memoria , pero ¿qué pasará con y? ¿También se escribirá en la memoria?

+1

y no está declarado como volátil ...? –

+1

no, intencionalmente no está declarado como volátil. y la pregunta es si escribir en una variable volátil significa una barrera de memoria para todas las variables. – Anonymice

+0

Creo que dependerá de su versión de Java ... –

Respuesta

5

Sí, bajo las reglas de the Java Language Specification (third edition) -- in particular section 17.4.4 - cada hilo que vea el nuevo valor de x también verá posteriormente el nuevo valor de y si intentan leerlo. No se garantiza que los hilos que no lean x se vean afectados.

Tenga en cuenta, sin embargo, que esta garantía no estaba presente en el modelo de memoria de la segunda edición de JLS. Allí, las lecturas y escrituras volátiles no tuvieron ningún efecto en el orden de los accesos de memoria no volátil.

+1

Para todas las personas que no son capaces de mapear las ediciones de la especificación del idioma a las versiones reales de Java: Esto significa que lo que Henning describe es verdadero comenzando desde Java 1.5 en adelante;) – Voo

Cuestiones relacionadas