interromper
Interrompa esta discussão. O estado do encadeamento que chama esse método será definido como "interrompido" e o encadeamento não para de funcionar.
Se a thread estiver bloqueada ao chamar o método wait (), wait (long) ou wait (long, int) ou join (), join (long), método join (long, int) da classe Object, sleep (long) ou Para métodos como sleep (long, int), o status interrompido será limpo e InterruptedException será recebido. ( Antes do bloqueio JUC ou da classe relacionada à fila lançar InterruptedException, o seguinte método estático interrompido será chamado para limpar o estado interrompido. É por isso que é necessário lançar essa exceção novamente ou chamar a interrupção novamente, caso contrário, a interrupção do thread ser perdido Status. Por exemplo: o thread principal monitora o status de interrupção do thread filho para fazer diferentes tratamentos. Se o thread filho lançar esta exceção e não tratá-la corretamente, o thread principal não perceberá o status de interrupção do thread filho . )
Se este encadeamento estiver na operação de E / S de InterruptibleChannel Se bloqueado, o canal será fechado, o status de interrupção do encadeamento será definido e o encadeamento receberá java.nio.channels.ClosedByInterruptException.
Se este encadeamento estiver bloqueado em java.nio.channels.Selector, o status de interrupção deste encadeamento será definido e retornará imediatamente da operação de seleção (pode ter um valor diferente de zero), assim como chamar o método de despertar de o seletor.
Se nenhuma das condições acima for verdadeira, o status de interrupção do encadeamento será definido.
Interromper um thread que não está em execução não tem efeito
interrompido
Método estático. Teste se o thread atual foi interrompido. Por meio desse método, o status de interrupção do encadeamento pode ser apagado. Em outras palavras, se você quiser chamar esse método duas vezes seguidas, a segunda chamada retornará falso (a menos que o thread atual seja interrompido novamente após a primeira chamada limpar seu status interrompido e antes que a segunda chamada verifique seu status).
Uma vez que este método retorna falso, ele refletirá a interrupção do encadeamento e será ignorado porque o encadeamento não estava ativo quando foi interrompido
public static boolean interrupted() {
return currentThread().isInterrupted(true);
}
é interrompido
Teste se este tópico foi interrompido. O status de interrupção do encadeamento não é afetado por este método.
Uma vez que este método retorna falso, ele refletirá a interrupção do encadeamento e será ignorado porque o encadeamento não estava ativo quando foi interrompido
public boolean isInterrupted() {
return isInterrupted(false);
}
isInterrupted (boolean)
private native boolean isInterrupted(boolean ClearInterrupted);
Pode ser visto que tanto interrompido quanto isInterrupted chamam o método local interno isInterrupted, e o parâmetro é se o status de interrupção está limpo.
A diferença entre interrompido e isInterrupted : interrompido atua no segmento atual e isInterrupted atua no objeto de segmento que chama este método. Por exemplo: chame o método isInterrupted do sub thread filho no thread principal principal e chame o método interrompido estático ao mesmo tempo. Em seguida, isInterrupted atua no sub thread filho e atua interrompido no thread principal principal