Modelo de memoria Java: ¿alguien puede explicarlo?

Durante años y años, he tratado de entender elparte de especificación Java que se ocupa del modelo de memoria y concurrencia. Tengo que admitir que he fallado miserablemente. Sí, entiendo las cerraduras y "sincronizado" y wait () y notify (). Y puedo usarlos bien, gracias. Incluso tengo una vaga idea sobre lo que hace "volátil". Pero todo eso no se derivó de la especificación del lenguaje, sino de la experiencia general.

Aquí hay dos preguntas de muestra que estoy haciendo. No estoy tan interesado en respuestas particulares, ya que necesito entender cómo se derivan las respuestas de la especificación (o tal vez sea cómo concluyo que la especificación no tiene respuesta).

¿Qué hace exactamente "volátil"?¿Se escriben en variables atómicas? ¿Depende del tipo de variable?

Respuestas a la pregunta(8)

Su respuesta a la pregunta