Una cosa que ninguna de las otras respuestas ha notado es que un atributo final
tiene propiedades especiales con respecto al modelo de memoria de Java. El efecto neto es que un hilo puede acceder de forma segura al valor de un atributo final
sin tomar medidas para sincronizarse con otros hilos.
FOLLOWUP
Es eso JVM específica?
La especificación del modelo de memoria de Java es parte de la especificación de lenguaje de Java, y (AFAIK) no ha cambiado desde Java 1.5. En ese sentido, esto no es específico de JVM.
Sin embargo, el comportamiento de Java si no sigue las reglas (es decir, si su código no sincroniza correctamente su uso de datos compartidos) depende de todo tipo de cosas, incluido el hardware donde ejecuta la aplicación.
Entre otras cosas, el modelo de memoria Java está diseñado para permitir que las máquinas multi-core ejecuten muchos subprocesos Java sin tener que vaciar continuamente las cachés de memoria ... lo que mataría el rendimiento. Básicamente, especifica algunas reglas que garantizarán que un hilo de Java vea las actualizaciones de memoria de otro hilo. Si una aplicación no sigue las reglas, es posible que un hilo verá un valor obsoleto (desactualizado) para algún campo escrito por algún otro hilo, lo que ocasionará un comportamiento indefinido ocasional.
¡Bien! ¡Creo que tengo mi respuesta! (¡6 respuestas! ¡WOW!) Todo esto funciona. –
¡Entonces acepte el primero! LOL –
Haz que 7 respuestas ... –