Javaコードのある時点でException
が発生すると、制御はcatch
ブロックに移動します。しかし、実際にこのコードがマルチスレッドのrun()
メソッドの中にある場合、Exception
が発生したときにコードをrun()
メソッドで終了するように指示するにはどうすればよいですか?例外が発生するたびにスレッドを停止する
つまり、Exception
が発生したことを知っているので、run()
メソッドが終了したスレッドにどのように指示できますか?
Javaコードのある時点でException
が発生すると、制御はcatch
ブロックに移動します。しかし、実際にこのコードがマルチスレッドのrun()
メソッドの中にある場合、Exception
が発生したときにコードをrun()
メソッドで終了するように指示するにはどうすればよいですか?例外が発生するたびにスレッドを停止する
つまり、Exception
が発生したことを知っているので、run()
メソッドが終了したスレッドにどのように指示できますか?
:(おそらくより良い)return
明示的またはあなたの終了条件を設定しますあなたのThread
のメソッドを呼び出すと、他の方法でreturn
を呼び出すのと同じ方法でThread
を終了する、return
を簡単に終了できます。あなたのThread
が複数のメソッドを持っている場合
たぶん、あなたはException
を監視し、Exception
が発生した場合にreturn
を呼び出し、このような何か、...
public void run() {
try {
// your code goes here
}
catch (Exception e) {
return;
}
}
しかし、最善の方法は、それぞれのメソッドを持っているかもしれませんそれがException
を投げることができると宣言してください。たとえば、あなたのThread
はこのようであれば...
public MyThread extends Thread {
public void run() {
try {
runLongTask1();
runLongTask2();
}
catch (Exception e) {
return;
}
}
public void runLongTask1() throws Exception {
// your code here
}
public void runLongTask2() throws Exception {
// your code here
}
}
は、他の方法のそれぞれが
Exception
を投げることができる方法を参照してください。したがって、
Exception
がこの
Thread
のメソッドのいずれかでスローされた場合、
run()
メソッドの
try-catch
と
Thread
の
return
がトリガーされ、終了します。もちろん
あなたrun()
方法でtry-catch
は、メソッドのすべてのコードをカバーする場合、それはとにかくrun()
方法の終わりに到達したとき、それは暗黙的であるので、あなたは、実際にreturn
する必要はありません。
いくつかの例外がスレッドを強制的にキャッチしても強制的に終了するかどうか知りませんか? – Lealo
...この例外が発生したときにrun()メソッドでコードを終了するように指示するにはどうすればコードが自動的にrun()メソッドが終了したスレッドに指示できますか?それは例外が発生したことを知っていますか?
あなたが正しく理解している場合は、catch
ブロックreturn
にコードを記載するか、終了条件を設定してください。これはスレッドを終了させます。
シナリオのカップルがあります:
あなたが外try/catch
を使用している場合は、明示的なreturn
は必要ありません:
public void run() {
try {
while (!someExitCondition) {
doSomethingUseful();
}
}
catch (Exception e) {
doSomethingWithTheException(e);
// Just falling through ends the thread, because
// `run` returns
}
}
あなたは、内側try/catch
を使用している場合は、あなたが使用する可能性がありますあなたはになら
public void run() {
while (!someExitCondition) {
try {
doSomethingUseful();
}
catch (Exception e) {
doSomethingWithTheException(e);
return; // Terminates the thread; alternately, set a termination condition
}
}
}
ありがとうございますが、doSomethingWithTheExceptionコードには何を書いていますか? –
@AbhishekShivkumar:これは、例外を処理するコードのプレースホルダ行です。例外を使って行うべきことは、コードが何を行い、例外にどのように対応すべきかによってまったく異なります。 –
質問の一部を見逃しているようです... – MByD
So?............ –
あなたは何をしたいのかについてもっと詳しく説明する必要があります。実際に起こっている事柄などが含まれています。もちろん、コードは千語に相当します。この質問は現在の形で合理的に答えられることはできません。 –