Sobes.tech
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