Sobes.tech
Middle+

¿Qué es la palabra clave volatile en Java y cómo se usa?

sobes.tech AI

Respuesta de la IA

volatile garantiza la visibilidad de los cambios en una variable para todos los hilos.

  • Garantía de visibilidad: Cuando un hilo modifica una variable volatile, otros hilos garantizan ver ese cambio. Sin volatile, los cambios pueden permanecer en la caché del hilo, sin sincronizarse con la memoria principal.
  • No atómico: volatile no garantiza la atomicidad de las operaciones. Operaciones como incremento (i++) no son atómicas y pueden causar condiciones de carrera incluso con volatile.

Se usa para:

  • Banderas de estado: Cuando un hilo establece una bandera para informar a otros hilos sobre algún estado.
  • Operaciones de lectura/escritura simples: Cuando las operaciones con la variable consisten en una sola escritura por un hilo y múltiples lecturas por otros.

Ejemplo de uso con una bandera:

// Ejemplo de uso de volatile para una bandera de finalización
public class VolatileExample {
    private volatile boolean terminated = false;

    public void start() {
        new Thread(() -> {
            while (!terminated) {
                // Trabajo del hilo
                System.out.println("El hilo está en ejecución...");
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
            System.out.println("Hilo finalizado.");
        }).start();
    }

    public void stop() {
        terminated = true; // Cambio en la variable volatile
    }

    public static void main(String[] args) throws InterruptedException {
        VolatileExample example = new VolatileExample();
        example.start();
        Thread.sleep(500);
        example.stop();
    }
}