Wenn ein InterruptedExceptiongeworfen wird, bedeutet dies, dass etwas diesen Thread unterbrechen (normalerweise beenden) möchte. Dies wird durch einen Aufruf der Thread- interrupt()Methode ausgelöst . Die Wartemethode erkennt dies InterruptedExceptionund löst ein aus, damit der Catch-Code die Anforderung zur Beendigung sofort verarbeiten kann und nicht warten muss, bis die angegebene Zeit abgelaufen ist.
Wenn Sie es in einer Single-Thread-App (und auch in einigen Multi-Thread-Apps) verwenden, wird diese Ausnahme niemals ausgelöst. Das Ignorieren durch eine leere catch-Klausel würde ich nicht empfehlen. Das Werfen des InterruptedExceptionlöscht den unterbrochenen Zustand des Threads. Wenn dies nicht richtig gehandhabt wird, gehen diese Informationen verloren. Deshalb würde ich vorschlagen zu laufen:
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
// code for stopping current task so thread stops
}
Was diesen Zustand wieder setzt. Beenden Sie danach die Ausführung. Dies wäre korrektes Verhalten, auch wenn es nie hart angewendet wird.
Was besser sein könnte, ist Folgendes hinzuzufügen:
} catch (InterruptedException e) {
throw new RuntimeException("Unexpected interrupt", e);
}
... Anweisung zum catch-Block. Das bedeutet im Grunde, dass es niemals passieren darf. Wenn der Code also in einer Umgebung wiederverwendet wird, in der er möglicherweise auftritt, wird er sich darüber beschweren.