Middle
Qual é a diferença entre os métodos interrupted() e isInterrupted() em Java?
sobes.tech IA
Resposta da IA
isInterrupted() verifica se o thread atual tem o sinal de interrupção definido, sem o resetar.
interrupted() verifica se o thread atual tem o sinal de interrupção definido, e o reseta após a verificação, se estiver definido. Este método é static.
Exemplo:
// Criar uma thread
Thread t = new Thread(() -> {
while (!Thread.currentThread().isInterrupted()) {
// Executar trabalho útil
}
System.out.println("Thread interrompido.");
});
// Iniciar a thread
t.start();
// Interromper a thread
t.interrupt();
// Verificar o estado do sinal após interrupt() com isInterrupted()
System.out.println("isInterrupted() após interrupt(): " + t.isInterrupted()); // Deve ser true
try {
// Esperar a thread terminar (neste caso, terminará rapidamente)
t.join();
} catch (InterruptedException e) {
// Restaurar o sinal de interrupção se join() for interrompido
Thread.currentThread().interrupt();
}
// Verificar o estado do sinal após interrupt() com interrupted() (de outro thread!)
// Atenção: chamar interrupted() de outro thread não faz sentido,
// pois interrupted() trabalha com o sinal do thread que o chama.
// Para demonstrar o funcionamento do interrupted(), deve-se chamá-lo do próprio thread interrompido.
// Exemplo de chamada a interrupted() dentro de outro thread (não relacionado ao thread t)
System.out.println("interrupted() do thread atual: " + Thread.interrupted()); // Deve ser false (se o thread atual não foi interrompido)
Diferença chave:
| Método | O sinal de interrupção é resetado? | Tipo de método |
|---|---|---|
isInterrupted() |
Não | Instância |
interrupted() |
Sim | Estático |