JavaのThread.sleepはいつInterruptedExceptionをスローしますか?それを無視するのは安全ですか?私はマルチスレッドを行っていません。私はちょうどいくつかの操作を再試行する前に、数秒待っています。JavaのThread.sleepはいつInterruptedExceptionをスローしますか?
答えて
例外を無視しないでください。
は時々InterruptedExceptionあるが などのRunnableによって定義されたタスクが 割り込みメソッドを呼び出したときなどのオプションではない投げ中断飲み込まない
次の紙を見てみましょう。この場合、 InterruptedExceptionを再発行することはできませんが、何もしたくない場合もあります。 ブロッキングメソッドが割り込みを検出し、InterruptedExceptionをスローすると、 は中断されたステータスをクリアします。 InterruptedException をキャッチして再スローできない場合は、 割り込みが発生していることを示す証拠を保持して、コールスタック上のコードが高い場合に割り込みを知り、必要に応じて応答します。このタスク は、現在の スレッドを「再割り込み」するためにinterrupt()を呼び出すことによって実行されます(リスト3を参照)。少なくとも、 InterruptedExceptionを捕捉して再スローしない場合は、戻る前に現在の スレッドを再割り込みしてください。
public class TaskRunner implements Runnable { private BlockingQueue<Task> queue; public TaskRunner(BlockingQueue<Task> queue) { this.queue = queue; } public void run() { try { while (true) { Task task = queue.take(10, TimeUnit.SECONDS); task.execute(); } } catch (InterruptedException e) { // Restore the interrupted status Thread.currentThread().interrupt(); } } }
から、ここで全体の論文を参照してください:
http://www.ibm.com/developerworks/java/library/j-jtp05236/index.html?ca=drs-
ページが見つかりません。投稿を更新できますか? – Laurence
http://www.ibm.com/developerworks/java/library/j-jtp05236/index.html?ca=drs- –
シングルスレッドのコードでそれを処理するために、固体と簡単な方法を希望b eをキャッチしてRuntimeExceptionで再試行して、すべてのメソッドに対して宣言する必要がないようにします。
Javaスペシャリストのニュースレター(残念ながらお勧めできます)は、interesting article on thisと、InterruptedException
の処理方法があります。それは読書と消化の価値があります。
通常、スリープが中断されると、InterruptedException
がスローされます。
これは間違っています。なぜなら、それは睡眠そのものではなく、実行中のスレッドであるからです。割り込みはスレッド状態です。それは単に睡眠方法を終了させる。 – ubuntudroid
InterruptedExceptionがスローされた場合、何かがそのスレッドを中断(通常は終了)したいことを意味します。これは、スレッドのinterrupt()メソッドの呼び出しによってトリガーされます。 waitメソッドはそれを検出してInterruptedExceptionをスローします。したがって、catchコードは終了要求をすぐに処理でき、指定された時間が経過するまで待つ必要はありません。
シングルスレッドのアプリケーション(およびマルチスレッドのアプリケーションの一部でも)を使用すると、その例外は発生しません。空のcatch節を持つことでそれを無視して、私はお勧めしません。 InterruptedExceptionをスローすると、スレッドの中断状態がクリアされるため、正しく処理されないと情報が失われます。したがって、私は実行するように提案するでしょう:
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
// code for stopping current task so thread stops
}
この状態を再び設定します。その後、実行を終了します。これは決して使用されることが厳しい、正しい動作になります。良いかもしれない何
は追加することです:catchブロックに
} catch (InterruptedException e) {
assert false;
}
声明。それは基本的に決して起こらないことを意味します。だから、コードが起こるかもしれない環境でコードが再使用されると、それについて文句を言うでしょう。
Javaのアサーションは[デフォルトではオフ]です(http://stackoverflow.com/a/2758645/1143274)。ですから、 'RuntimeException'を投げる方が良いでしょう。 –
Thread
のsleep()
およびwait()
のようなメソッドはInterruptedException
を投げるかもしれません。これは、待機中またはスリープ中のthread
を中断したい場合に発生します。
- 1. なぜReentrantLockはInterruptedExceptionをスローしないのですか?
- 2. InterruptedExceptionをクリアしてInterruptedExceptionをスローしたり終了したりする必要はありませんか?
- 3. エグゼキュータがThread.sleepを満たしているとき、スレッドがスリープせずに終了する、またはInterruptedExceptionをスローする理由を教えてください。
- 4. Semaphore.acquire()は偽のウェイクアップのためにInterruptedExceptionをスローできますか?
- 5. Thread.sleep()によってスローされたInterruptedExceptionの不適切な処理を実証するための良いサンプルプログラムは何ですか?
- 6. serversocket.accept()はいつ例外をスローしますか? [java]
- 7. のJava:いくつかのケースでのThread.sleep(...)対LockSupport.parkNanos
- 8. Javaマルチスレッドthread.sleep()
- 9. は一定時間後にスレッドを中断しますが、InterruptedExceptionをスローする必要がありますか?
- 10. Thread.join()の前にThread.interrupt()を呼び出すと、join()はすぐにInterruptedExceptionをスローしますか?
- 11. .NETに相当するInterruptedException(Java)とは何ですか?
- 12. JavaでThread.yield()とThread.sleep(0)の違いは何ですか?
- 13. Java Trident LibraryとThread.sleep()
- 14. javaのThread.sleep()の代替
- 15. Javaのスネークゲーム回避のThread.sleep
- 16. RunnableにInterruptedExceptionをスローするように指示する方法はありますか?
- 17. Thread.Sleep()の使用はいつ賢明ですか?
- 18. StackOverflowErrorはいつスローされますか?
- 19. thread.sleepしていないのは
- 20. 私のJava関数はnullpointerexceptionをスローしますか?
- 21. SQL SELECT文はいつ例外をスローしますか?
- 22. Java:スレッド内のThread.sleep()whileループが機能しない
- 23. libsvm-javaは、いくつかのトレーニングを繰り返して、NullPointerExceptionをスローします。
- 24. .NETのAzureワーカーロールでThread.SleepまたはTimerを使用していますか?
- 25. Javaの同期コンテキストからThread.sleep()を呼び出す
- 26. Thread.Sleep()はデバッガのフォーカスを盗みます
- 27. Akka-Javaは依頼待ちでDeadLetterExceptionをスローしています
- 28. なぜInterruptedExceptionを捕まえてThread.currentThread.interrupt()を呼び出すのですか?効果的なJavaでは
- 29. Thread.SleepはTCPListenerを無効にしますか?
- 30. Java:なぜThread.sleep()とyield()が静的なのですか?
http://stackoverflow.com/questions/1024651/do-i-have-to-worry-about-interruptedexceptions-if-i-dont-interrupt-anything-myse –
「無視する」という意味に依存しますが、 。 'InterruptedException'はキャッチされた例外です。したがって、' Thread'に参加またはスリープするメソッドに対してこのタイプの例外を処理または宣言しない限り、コンパイルできません。また、 'Object'に対して' wait() 'を呼び出します。 – 8bitjunkie
この資料は、このメカニズムを理解するのに役立ちます。[InterruptedExceptionとは何か?](http://www.yegor256.com/2015/10/20/interrupted-exception.html) – yegor256