Middle
¿Cuál es la diferencia entre los métodos interrupted() y isInterrupted() en Java?
sobes.tech AI
Respuesta de la IA
isInterrupted() verifica si el hilo actual tiene establecido el bandera de interrupción, sin borrarla.
interrupted() verifica si el hilo actual tiene establecido el bandera de interrupción, y lo borra después de verificarlo, si estaba establecido. Este método es static.
Ejemplo:
// Crear un hilo
Thread t = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
// Realizar trabajo útil
}
System.out.println("Hilo interrumpido.");
});
// Iniciar el hilo
t.start();
// Interrumpir el hilo
t.interrupt();
// Verificar el estado de la bandera después de interrupt() con isInterrupted()
System.out.println("isInterrupted() después de interrupt(): " + t.isInterrupted()); // Debería ser true
try {
// Esperar a que termine el hilo (en este caso, terminará rápidamente)
t.join();
} catch (InterruptedException e) {
// Restaurar la bandera de interrupción si join() fue interrumpido
Thread.currentThread().interrupt();
}
// Verificar el estado de la bandera después de interrupt() con interrupted() (¡desde otro hilo!)
// Atención: Llamar a interrupted() desde otro hilo no tiene sentido,
// ya que interrupted() trabaja con la bandera del hilo que lo llama.
// Para demostrar cómo funciona interrupted(), hay que llamarlo desde el propio hilo interrumpido.
// Ejemplo de llamada a interrupted() dentro de otro hilo (no relacionado con la bandera del hilo t)
System.out.println("interrupted() desde el hilo actual: " + Thread.interrupted()); // Debería ser false (si el hilo actual no fue interrumpido)
Diferencia clave:
| Método | ¿Se borra la bandera de interrupción? | Tipo de método |
|---|---|---|
isInterrupted() |
No | Instancia |
interrupted() |
Sí | Estático |