El Modelo de Memoria Java (desde 1.5) trata los campos final
de manera diferente a los campos que no son final
. En particular, siempre que la referencia this
no escape durante la construcción, escribe en final
, los campos en el constructor están garantizados para ser visibles en otros hilos, incluso si el objeto está disponible para el otro hilo a través de una carrera de datos. (No se garantiza que los campos que no sean final
sean visibles, por lo que si los publica incorrectamente, otro subproceso podría verlos en un estado parcialmente construido)Scala y el Modelo de Memoria Java
¿Existe documentación sobre cómo/si el compilador Scala crea final
(en lugar de no final
) campos de respaldo para las clases? Revisé las especificaciones del lenguaje y busqué en la web, pero no puedo encontrar ninguna respuesta definitiva. (En comparación, la anotación @scala.volatile
es documentado para marcar un campo como volatile
)
Pero el comportamiento, desde una perspectiva de concurrencia, de construcciones de lenguaje debería ser parte de su especificación. ¡Yo argumentaría! –