Wann löst Japas Thread.sleep eine InterruptedException aus? Ist es sicher, es zu ignorieren? Ich mache kein Multithreading. Ich möchte nur ein paar Sekunden warten, bevor ich eine Operation erneut versuche.
110
Wann löst Japas Thread.sleep eine InterruptedException aus? Ist es sicher, es zu ignorieren? Ich mache kein Multithreading. Ich möchte nur ein paar Sekunden warten, bevor ich eine Operation erneut versuche.
InterruptedException
Ausnahme ist eine gefangen, so dass Sie nicht kompilieren können , wenn Sie diese Art von Ausnahme auf jeder Methode behandeln oder erklären , die einen beitritt oder schlafenThread
, oder Anrufewait()
aufObject
.Antworten:
Sie sollten die Ausnahme im Allgemeinen NICHT ignorieren. Schauen Sie sich das folgende Papier an:
Das gesamte Papier finden Sie hier:
http://www.ibm.com/developerworks/java/library/j-jtp05236/index.html?ca=drs-
quelle
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 diesInterruptedException
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: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:
... 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.
quelle
RuntimeException
.Der Java Specialists Newsletter (den ich vorbehaltlos empfehlen kann) hatte einen interessanten Artikel darüber und wie man damit umgeht
InterruptedException
. Es lohnt sich zu lesen und zu verdauen.quelle
Methoden wie
sleep()
undwait()
der KlasseThread
könnten eine werfenInterruptedException
. Dies wird passieren, wenn ein andererthread
dasthread
Warten oder Schlafen unterbrechen wollte .quelle
Eine solide und einfache Möglichkeit, mit Single-Threaded-Code umzugehen, besteht darin, ihn abzufangen und in einer RuntimeException erneut zu speichern, um zu vermeiden, dass er für jede Methode deklariert werden muss.
quelle
Das
InterruptedException
wird normalerweise geworfen, wenn ein Schlaf unterbrochen wird.quelle