如果Exception
在 Java 代码中的某个点出现,则控制转到该catch
块。但是,如果此代码实际上是在多线程run()
方法中,我如何指示代码在发生run()
时完成该方法Exception
?
换句话说,我怎样才能指示线程该run()
方法已经完成,因为它知道Exception
已经发生了?
如果Exception
在 Java 代码中的某个点出现,则控制转到该catch
块。但是,如果此代码实际上是在多线程run()
方法中,我如何指示代码在发生run()
时完成该方法Exception
?
换句话说,我怎样才能指示线程该run()
方法已经完成,因为它知道Exception
已经发生了?
...当发生此异常时,我如何指示代码使用 run() 方法结束,即代码如何自动指示线程 run() 方法已完成,因为它知道有异常发生发生了?
如果我对您的理解正确,请将代码放在catch
块中return
或设置终止条件。这终止了线程。
有几种情况:
如果您使用的是 external 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 的任何方法中抛出an Thread
,它将触发该try-catch
方法的run()
,并return
退出Thread
,从而终止它。
当然,如果try-catch
你的run()
方法中的 覆盖了方法的所有代码,你实际上不需要,因为无论如何return
它到达方法的末尾时它是隐式的。run()