Volver a la página principal
lunes 3 marzo 2025
5

Qué es y cómo usar volatile en Java

La palabra clave volatile en Java se usa para indicar que una variable puede ser modificada por múltiples hilos de ejecución. Garantiza que los cambios en la variable sean visibles para todos los hilos de manera inmediata, evitando que se almacene en cachés locales de los hilos.

¿Cómo funciona volatile en Java?

Cuando una variable se declara como volatile, se asegura que todas las lecturas y escrituras en esa variable ocurran directamente en la memoria principal. Esto evita problemas de sincronización en entornos multihilo, donde los valores de las variables pueden ser almacenados en cachés locales de cada hilo, lo que podría llevar a inconsistencias.

Características de volatile:

  • Garantiza visibilidad de los cambios en la variable para todos los hilos.
  • No garantiza exclusión mutua (para operaciones atómicas, se recomienda synchronized o Atomic*).
  • Se usa principalmente para indicadores de estado o variables de control en hilos.

Ejemplo de uso de volatile

class VolatileExample {
    private static volatile boolean running = true;

    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(() -> {
            while (running) {
                // El hilo sigue ejecutándose mientras running sea true
            }
            System.out.println("Hilo detenido.");
        });

        thread.start();
        Thread.sleep(2000); // Simula alguna operación
        running = false; // Modifica la variable desde el hilo principal
        thread.join();
    }
}

Explicación:

  • La variable running es compartida entre dos hilos.
  • Sin volatile, el segundo hilo podría no ver el cambio de running = false, ya que podría estar almacenado en caché.
  • Con volatile, cualquier modificación a running es visible inmediatamente para todos los hilos.

Diferencias entre volatile y synchronized

Característica volatile synchronized
Visibilidad
Exclusión mutua No
Uso recomendado Variables compartidas de estado Bloques críticos de código

Cuándo usar volatile

  • Cuando se tiene una variable compartida entre múltiples hilos.
  • Cuando solo se necesitan garantías de visibilidad y no de atomicidad.
  • Para banderas de control de ejecución de hilos (boolean running).
Etiquetas:
java
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer