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. Sinvolatile, los cambios pueden permanecer en la caché del hilo, sin sincronizarse con la memoria principal. - No atómico:
volatileno garantiza la atomicidad de las operaciones. Operaciones como incremento (i++) no son atómicas y pueden causar condiciones de carrera incluso convolatile.
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();
}
}