¿Para qué sirve la palabra clave volatile en Java? Explique con ejemplos
¡Hola a todos! Soy un desarrollador Java principiante y últimamente estoy estudiando activamente multithreading. Me topé con la palabra clave `volatile`, pero no termino de entender para qué sirve y cuándo usarla.
Escribí un pequeño código donde un hilo cambia la bandera `running`, y otro hilo la verifica en un bucle. Sin `volatile`, el programa a veces funciona incorrectamente: el segundo hilo no ve el cambio y continúa ejecutándose.
Aquí está mi código:
```java
public class TestVolatile {
private static boolean running = true;
public static void main(String[] args) throws InterruptedException {
Thread worker = new Thread(() -> {
while (running) {
// hacemos algo
}
System.out.println("Worker detenido");
});
worker.start();
Thread.sleep(1000);
running = false; // cambiamos la bandera en el hilo principal
System.out.println("Bandera establecida en false");
}
}
```
El problema es que a veces el prog