Wenn ein InterruptedException
geworfen 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 InterruptedException
und 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 InterruptedException
lö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.