Volátiles

Definición - ¿Qué significa volátil?

Volátil es una palabra clave dentro del lenguaje de programación java que especifica que una variable miembro asociada con una clase puede ser alterada de forma asíncrona por varios subprocesos. La palabra clave volátil en el código actúa como un modificador cuando se declara un miembro. Las palabras clave son palabras fundamentalmente reservadas con un significado distinto en el contexto de un compilador.

La palabra clave volátil se utiliza siempre que la variable signifique algún tipo de variable que dependa del entorno o del sistema, como contadores y relojes simples.

Techinfo explica Volátil

La palabra clave volátil asegura que cada acceso de lectura a una variable miembro devuelva el valor más reciente de la misma. Esto no es efectivo cuando los cambios recientes se realizan utilizando un hilo diferente. Si una variable miembro no se declara como volátil, un hilo no podrá reconocer las modificaciones que se le hayan hecho utilizando un hilo diferente.

Para un miembro doble o largo, la palabra clave volátil también asegura que la máquina virtual no generará dos escrituras sucesivas de 32 bits, sino que creará solo una escritura de 64 bits. Si esto no es factible, la implementación de JVM continúa asegurando la atomicidad de esta función para que la antigua mitad inferior no se lea con la nueva mitad superior de algún doble volátil o largo.

Las escrituras y lecturas volátiles establecen una relación que sucede antes. Antes de acceder a un objeto volátil, se produce una sincronización entre la memoria principal y las variables en caché, tal como ocurre antes de entrar o después de salir de un bloque sincronizado. Esto implica que un objeto volátil se puede publicar de forma segura sin sincronización; es decir, cuando un subproceso accede a un objeto volátil, los miembros de ese objeto también se actualizan.

Cuando una variable se describe como volátil, el compilador JVM y Java realizan las siguientes dos cosas.

  1. El compilador no maximiza las declaraciones y expresiones relacionadas con esa variable.
  2. JVM sincroniza la variable.

Las ventajas de los volátiles son las siguientes:

  • Es ligero
  • Causa una sobrecarga muy pequeña para las lecturas y escrituras, pero sigue siendo más rápido que el bloqueo.
  • Volátil es resistente a los bloqueos muertos.