如果在Java代碼中某處出現Exception
,則控制權轉至catch
塊。但是,如果此代碼實際上在多線程run()
方法中,當Exception
發生時,如何指示代碼以run()
方法結束?每當發生異常時立即停止線程
換句話說,我如何指示線程run()
方法已完成,因爲它知道發生了一個Exception
?
如果在Java代碼中某處出現Exception
,則控制權轉至catch
塊。但是,如果此代碼實際上在多線程run()
方法中,當Exception
發生時,如何指示代碼以run()
方法結束?每當發生異常時立即停止線程
換句話說,我如何指示線程run()
方法已完成,因爲它知道發生了一個Exception
?
如果在是您的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
。因此,如果在此Thread
的任何方法中引入Exception
,它將觸發run()
方法中的try-catch
和Thread
中的return
,從而終止它。
當然,如果你的run()
方法try-catch
覆蓋方法的所有代碼,你並不需要真正return
,因爲它是隱含的,當它到達run()
方法啦。
你是否碰巧知道一些異常是否會迫使某個線程退出,即使我正在捕捉它們? – Lealo
...當發生此異常時,我該如何指示代碼以run()方法結束,.ie如何自動指示線程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
,你可以用一個明確return
或(可能更好)設置你的終止條件:
public void run() {
while (!someExitCondition) {
try {
doSomethingUseful();
}
catch (Exception e) {
doSomethingWithTheException(e);
return; // Terminates the thread; alternately, set a termination condition
}
}
}
謝謝,但是我在doSomethingWithTheException代碼中編寫了什麼? –
@AbhishekShivkumar:這只是處理異常的代碼的佔位符行。你應該對異常做什麼完全取決於你的代碼做什麼以及它應該如何迴應異常。 –
好像你想念一些問題的部分... – MByD
那麼?............ –
你需要提供更多關於你想要發生的事情的更多細節,實際發生的事情等等。當然,代碼勝過千言萬語。這個問題目前的形式無法合理回答。 –