Exception
Java コードのある時点で が発生した場合、コントロールはcatch
ブロックに移動します。ただし、このコードが実際にマルチスレッド メソッド内にある場合、コードが発生したときにメソッドrun()
を終了するようにコードに指示するにはどうすればよいでしょうか?run()
Exception
つまり、run()
メソッドが終了したことをスレッドに指示するにはどうすればよいException
でしょうか。
Exception
Java コードのある時点で が発生した場合、コントロールはcatch
ブロックに移動します。ただし、このコードが実際にマルチスレッド メソッド内にある場合、コードが発生したときにメソッドrun()
を終了するようにコードに指示するにはどうすればよいでしょうか?run()
Exception
つまり、run()
メソッドが終了したことをスレッドに指示するにはどうすればよいException
でしょうか。
...この例外が発生したときに run() メソッドで終了するようにコードに指示するにはどうすればよいですか。つまり、run() メソッドが終了したことをコードがスレッドに自動的に指示するにはどうすればよいですか?発生した?
私の理解が正しければ、コードをcatch
ブロックに入れるreturn
か、終了条件を設定してください。それはスレッドを終了します。
いくつかのシナリオがあります:
outer を使用している場合はtry/catch
、明示的に指定return
する必要はありません:
public void run() {
try {
while (!someExitCondition) {
doSomethingUseful();
}
}
catch (Exception e) {
doSomethingWithTheException(e);
// Just falling through ends the thread, because
// `run` returns
}
}
inner を使用している場合はtry/catch
、明示的に使用するreturn
か、(おそらくより良い) 終了条件を設定します。
public void run() {
while (!someExitCondition) {
try {
doSomethingUseful();
}
catch (Exception e) {
doSomethingWithTheException(e);
return; // Terminates the thread; alternately, set a termination condition
}
}
}
run()
のメソッド内にいる場合は、他のメソッドを呼び出すとメソッドの処理が終了するのと同じ方法でを終了Thread
できます。return
Thread
return
たぶん、あなたが監視し、発生した場合にException
呼び出すこのようなもの...return
Exception
public void run() {
try {
// your code goes here
}
catch (Exception e) {
return;
}
}
ただし、Thread
複数のメソッドがある場合、最善の方法は、各メソッドに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
、 this のいずれかのメソッドで がスローされると、メソッドのThread
がトリガーされ、 が終了するためtry-catch
、run()
メソッドは終了します。return
Thread
もちろん、メソッドtry-catch
内のがメソッドのすべてのコードをカバーしている場合は、メソッドの最後に到達すると暗黙的であるため、run()
実際に を実行する必要はありません。return
run()