我想討論一件事情是,當線程中run方法的主體發生異常時,它將反映在哪裏(調用者)以及如何處理此問題。Java異常處理
這裏是我的代碼:
class MyThread extends Thread{
public void run() throws IllegalInterruptedException{
Thread.currentThread().sleep(1234);
}
}
那麼誰(來電)將管理此異常。
我想討論一件事情是,當線程中run方法的主體發生異常時,它將反映在哪裏(調用者)以及如何處理此問題。Java異常處理
這裏是我的代碼:
class MyThread extends Thread{
public void run() throws IllegalInterruptedException{
Thread.currentThread().sleep(1234);
}
}
那麼誰(來電)將管理此異常。
如果我理解得很好,您希望能夠處理在另一個線程中觸發的異常。看看是,setDefaultUncaughtExceptionHandler,一個頁面樣本:
異常是由一個程序時發生了異常的發生異常。一般教程可用here,但總結是,你的程序將與找到的東西來處理它的希望拋出異常的類內搜索:也許catch語句,如:
catch (IllegalInterruptedException e) {
//what you want the program to do if an IllegalInterruptedException
//is thrown elsewhere and caught here. For example:
System.err.println("program interrupted!" + e.getMessage());
}
如果你的程序可以」 t在拋出該語句的類中找到一個catch語句,它會查找某個東西在父類中處理它。請注意,拋出異常時,拋出異常時子類所做的任何操作都會停止。出於這個原因,你應該把可能拋出異常的代碼塊放在'try'塊中,然後用你想在'finally'語句中執行的任何內容來執行它,無論如何它都會執行。
上面鏈接的教程真的很有幫助。
[this](http://stackoverflow.com/questions/536811/doubt-in-exception-handling-and-finally-block-in -java)在SO的其他地方也是一個有用的答案。 – Charlie 2011-06-11 15:37:20
你沒有真正回答這個問題,這是關於多線程環境中的異常情況(即哪個線程獲取異常以及它如何傳播)的問題。另外,異常不會在父類中處理,而是在調用鏈上。 – 2011-06-11 17:37:20
你可以看到run()
像main()
並得到你自己的答案。 但我不認爲你可以覆蓋run()
並宣佈new nonRuntime-Exceptions
..所以你會得到一個編譯錯誤。
PS:我找不到IllegalInterruptedException
,也許你想說InterruptedException
是的,你絕對正確,但沒有經過檢查異常 – Anuj 2011-06-11 17:46:32
未經檢查的異常是延長RuntimeException的異常。我將Checked Exceptions稱爲nonRuntime-Exceptions。 – 2011-06-11 18:22:42
有2種不同的情況:
樣例程序:
public class ThreadGroupDemo extends ThreadGroup {
public ThreadGroupDemo() {
super("This is MyThreadGroupDemo");
}
public void uncaughtException(Thread t, Throwable ex) {
// Handle your exception here ....
}
}
Thread t = new Thread(new ThreadGroupDemo(), "My Thread") {
// Some code here ......
};
t.start();
注:退房this link.
thanx,但我可以使用它作爲uncheckedException。 – Anuj 2011-06-11 17:49:58
還有另一個選擇 - 做任務可贖回和使用執行人提交它。當你獲得未來時,你會自動包裝任何異常。
我在問:爲此代碼: – Anuj 2011-06-11 15:15:38
好吧,比我的回答站 – 2011-06-11 15:26:27