Supongamos que mi aplicación tiene solo un subproceso y la plataforma en la que se ejecuta la aplicación tiene varias CPU. Es posible que el subproceso único de la aplicación en algún momento se ejecute en la CPU A, lea el valor de la propiedad X, modifique su valor y el valor modificado de la propiedad X no se confirme en la memoria principal, solo resida en el registro de la CPU o cache. Luego, después de un tiempo, el mismo hilo de la aplicación puede continuar su flujo en la CPU B, leer el valor de la propiedad X y obtener el valor obsoleto de la memoria principal, ya que el valor actualizado reside en el registro/caché de la CPU A.
Entonces, hasta ahora, vi en todas partes que este tipo de problemas de visibilidad ocurren solo en aplicaciones de subprocesos múltiples, pero parece que en el caso de que lo haya descrito, eso también es posible.
Alguna idea ?
La definición del lenguaje Java dice que existe una relación de "sucede antes" entre cualquier cosa que suceda antes en un hilo y cualquier cosa que suceda después en el mismo hilo. Esto significa que es responsabilidad de la JVM, trabajando con el sistema operativo, garantizar la visibilidad de cualquier dato escrito anteriormente en el subproceso para cualquier operación posterior en el mismo subproceso. En la mayoría de los sistemas operativos, creo que esto se manejaría a nivel del sistema operativo, guardando el estado del registro y descargando el caché en la memoria cuando se cambia un subproceso. En cualquier caso, no tienes que preocuparte por eso al escribir código Java.