次の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
、それは言って、完璧な理にかなって、「私は、中断していた場合、私は、ファイルを読み込むしようとしているの私のアクションを完了できません」。つまり、メソッドがthrowすることは完全に理にかなってい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;
}
この投稿は、こちらの記事に書き直されました。