in

Palabra clave volátil en Java – Javatpoint

La palabra clave volátil se utiliza para modificar el valor de una variable por diferentes subprocesos. También se usa para hacer que las clases sean seguras para subprocesos. Significa que varios subprocesos pueden usar un método y una instancia de las clases al mismo tiempo sin ningún problema. La palabra clave volátil se puede utilizar con tipos primitivos u objetos.

La palabra clave volátil no almacena en caché el valor de la variable y siempre lee la variable de la memoria principal. La palabra clave volátil no se puede utilizar con clases o métodos. Sin embargo, se usa con variables. También garantiza visibilidad y orden. Evita que el compilador reordene el código.

El contenido del registro de dispositivo en particular puede cambiar en cualquier momento, por lo que necesita la palabra clave volátil para asegurarse de que el compilador no optimice dichos accesos.

Ejemplo

En el ejemplo anterior, suponga que dos subprocesos están trabajando en la misma clase. Ambos subprocesos se ejecutan en diferentes procesadores donde cada subproceso tiene su copia local de var. Si algún hilo modifica su valor, el cambio no se reflejará en el original en la memoria principal. Conduce a una inconsistencia de datos porque el otro subproceso no es consciente del valor modificado.

En el ejemplo anterior, las variables estáticas son miembros de clase que se comparten entre todos los objetos. Solo hay una copia en la memoria principal. El valor de una variable volátil nunca se almacenará en la caché. Toda la lectura y escritura se realizará desde y hacia la memoria principal.

¿Cuándo usarlo?

  • Puede utilizar una variable volátil si desea leer y escribir variables largas y dobles automáticamente.
  • Se puede utilizar como una forma alternativa de lograr la sincronización en Java.
  • Todos los hilos del lector verán el valor actualizado de la variable volátil después de completar la operación de escritura. Si no está utilizando la palabra clave volátil, es posible que un hilo de lector diferente vea valores diferentes.
  • Se utiliza para informar al compilador que varios subprocesos accederán a una declaración en particular. Evita que el compilador realice reordenamientos u optimizaciones.
  • Si no utiliza el compilador de variables volátiles, puede reordenar el código, libre de escribir en la memoria caché el valor de la variable volátil en lugar de leer desde la memoria principal.

Puntos importantes

  • Puede utilizar la palabra clave volátil con variables. El uso de palabras clave volátiles con clases y métodos es ilegal.
  • Garantiza que el valor de la variable volátil siempre se leerá desde la memoria principal, no desde la caché de subprocesos local.
  • Si declaró la variable como volátil, la lectura y la escritura son atómicas
  • Reduce el riesgo de errores de coherencia de la memoria.
  • Cualquier escritura en una variable volátil en Java establece un suceso antes de la relación con las sucesivas lecturas de esa misma variable.
  • Las variables volátiles siempre son visibles para otros hilos.
  • La variable volátil que es una referencia de objeto puede ser nula.
  • Cuando una variable no se comparte entre varios subprocesos, no es necesario utilizar la palabra clave volátil con esa variable.

Diferencia entre sincronización y palabra clave volátil

La palabra clave volátil no sustituye a la palabra clave sincronizada, pero se puede utilizar como alternativa en determinados casos. Existen las siguientes diferencias que son las siguientes:

Palabra clave volátil Palabra clave de sincronización
La palabra clave volátil es un modificador de campo. La palabra clave sincronizada modifica bloques de código y métodos.
El hilo no se puede bloquear para esperar en caso de volatilidad. Los hilos se pueden bloquear para esperar en caso de sincronizarse.
Mejora el rendimiento del hilo. Los métodos sincronizados degradan el rendimiento del hilo.
Sincroniza el valor de una variable a la vez entre la memoria del hilo y la memoria principal. Sincroniza el valor de todas las variables entre la memoria del hilo y la memoria principal.
Los campos volátiles no están sujetos a la optimización del compilador. La sincronización está sujeta a la optimización del compilador.

Ejemplo de palabra clave volátil

En el siguiente ejemplo, hemos definido una clase que aumenta el valor del contador. El método run () en VolatileThread.java obtiene el valor actualizado y el valor anterior cuando el hilo comienza a ejecutarse. En la clase principal, definimos la matriz de subprocesos.

VolatileData.java

VolatileThread.java

VolatileMain.java

Producción:

[Thread 9]: Old value = 0
[Thread 9]: New value = 1
[Thread 10]: Old value = 1
[Thread 10]: New value = 2

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Java amplía la palabra clave

standing legs cross

Etiquetas de piernas cruzadas