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.
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.
volatile
:
synchronized
o Atomic
*).
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();
}
}
running
es compartida entre dos hilos.
volatile
, el segundo hilo podría no ver el cambio de running = false
, ya que podría estar almacenado en caché.
volatile
, cualquier modificación a running
es visible inmediatamente para todos los hilos.
volatile
y synchronized
Característica |
volatile
|
synchronized
|
---|---|---|
Visibilidad | Sí | Sí |
Exclusión mutua | No | Sí |
Uso recomendado | Variables compartidas de estado | Bloques críticos de código |
volatile
boolean running
).
Jorge García
Fullstack developer