2010-08-02 11 views
9

In Java löst Thread.sleep() InterruptedException. Was ist das Richtige mit dieser Ausnahme zu tun?InterruptedException von Thread.sleep()

Sollte ich

  1. die Ausnahme der Aufrufkette ausbreiten oben?
  2. die ausnahme schlucken?
  3. etwas anderes tun (bitte vorschlagen)?
+2

Abhängig davon, warum die Ausnahme aufgetreten ist. Ist das eine theoretische Frage oder hast du einen Anwendungsfall? –

+0

Dieser Artikel kann Ihnen helfen, diesen Mechanismus zu verstehen: [Was tun Sie mit InterruptedException?] (Http://www.yegor256.com/2015/10/20/interruptedException.html) – yegor256

Antwort

9

Sie sollten die Ausnahme erneut auslösen.

Dies ist ein Auszug aus Brian Goetz ist, der Autor des ausgezeichneten Buch "Java Concurrency in Practice":

mit InterruptedException Umgang:

Wenn werfen InterruptedException bedeutet, dass ein Verfahren eine blockierende Methode ist, , dann Aufruf einer Sperrmethode bedeutet , dass Ihre Methode ist eine Blockierungsmethode auch, und Sie sollten eine Strategie für den Umgang mit InterruptedExc haben eption. Oft ist die einfachste Strategie ist InterruptedException sich zu werfen, wie im putTask gezeigt() und getTask() Methoden in 1. Dadurch Auflisten Ihre Methode anspricht sowie zur Unterbrechung und erfordert oft nichts mehr als Zugabe InterruptedException zu Ihrer throws-Klausel.

See: Dealing with InterruptedException

+2

Eine andere Möglichkeit ist es, aktiviere den Interrupt-Status sofort. Thread.currentThread(). Interrupt(). Dies ist manchmal nützlich, wenn Sie die aufgerufene API nicht kontrollieren (vielleicht implementieren Sie eine Schnittstelle eines Drittanbieters), aber Sie möchten, dass der Interrupt-Status erhalten bleibt, damit eine spätere Check/Blocking-Methode bemerkt werden kann . –

0

Wenn alles, was Sie versuchen, einige Zeit zu tun verbrennen ist, würde ich vorschlagen, nur zu kontrollieren und die Ausnahme zu ignorieren.

Wenn Sie auf der anderen Seite die richtige Menge an Wartezeit benötigen und jede vorbeugende Unterbrechung für Ihr Programm WIRKLICH SCHLECHT ist, sollten Sie die Ausnahme unbedingt erneut ausführen.

Es hängt nur davon ab, warum die Ausnahme aufgetreten ist und was Ihr Anwendungsfall für Thread.sleep() an erster Stelle ist.