次のInterruptedExceptionの処理方法の違いは何ですか?それを行うための最良の方法は何ですか?
をスローするメソッドを呼び出したので、おそらくこの質問をするようになりましたInterruptedException
。
まず、throws InterruptedException
それが何であるかを確認する必要があります。メソッドシグネチャの一部と、呼び出しているメソッドを呼び出した場合に発生する可能性のある結果。InterruptedException
したがって、メソッド呼び出しの完全に有効な結果であるという事実を受け入れることから始めます。
さて、あなたが呼び出しているメソッドがそのような例外をスローした場合、あなたのメソッドは何をすべきでしょうか?あなたは次のことを考えることによって答えを理解することができます:
実装しているメソッドがスローするのは理にかなっていInterruptedException
ますか?言い換えると、メソッドInterruptedException
を呼び出すときに賢明な結果はありますか?
throw new RuntimeException(e)
今では、ただやることは悪い考えであることは明らかです。発信者にはあまり礼儀正しくありません。新しいランタイム例外を発明することはできますが、根本的な原因(誰かがスレッドの実行を停止したい)が失われる可能性があります。
その他の例:
実装Runnable
:ご存知かもしれませんが、の署名でRunnable.run
は再スローできませんInterruptedExceptions
。さて、あなたは実装Runnable
にサインアップしました。つまり、可能性に対処するためにサインアップしたということですInterruptedExceptions
。などの別のインターフェースを選択するか、Callable
上記の2番目のアプローチに従います。
呼び出し元Thread.sleep
:ファイルを読み取ろうとしていますが、仕様では、1秒を挟んで10回試行する必要があるとされています。あなたはThread.sleep(1000)
。だから、あなたは対処する必要がありますInterruptedException
。このような方法の場合、 「中断された場合、ファイルを読み取ろうとするアクションを完了できません」tryToReadFile
と言うのは完全に理にかなっています。言い換えれば、メソッドがスローすることは完全に理にかなっています。InterruptedExceptions
String tryToReadFile(File f) throws InterruptedException {
for (int i = 0; i < 10; i++) {
if (f.exists())
return readFile(f);
Thread.sleep(1000);
}
return null;
}
この投稿はここの記事として書き直されました。