1
- 異常處理的目的不是爲了處理與異步事件(例如,磁盤I/O完成,網絡消息到達,鼠標單擊和擊鍵)相關的問題,這些異步事件與程序的流程並行且獨立於流程的控制。
如何異常處理不是設計來處理異步事件?爲什麼會這樣?爲什麼異常處理不能處理異步事件?
,如果你通過很詳細的例子增強你的答案我應該心存感激。
- 異常處理的目的不是爲了處理與異步事件(例如,磁盤I/O完成,網絡消息到達,鼠標單擊和擊鍵)相關的問題,這些異步事件與程序的流程並行且獨立於流程的控制。
如何異常處理不是設計來處理異步事件?爲什麼會這樣?爲什麼異常處理不能處理異步事件?
,如果你通過很詳細的例子增強你的答案我應該心存感激。
我認爲這是一個誤導性的陳述。
異步工作方式是通過Java線程完成(或進程但那是另一回事)。
什麼是真實的是,如果你啓動一個線程,並在該線程中引發異常,你將無法從你的主線程捕獲它。
但沒有什麼能阻止你在新線程處理異常。
實施例 - 下面打印Exception was raised in the thread but we can still handle it
的代碼:
public static void main(String[] args) throws Exception {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
throw new RuntimeException("oops");
}
});
t.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
System.out.println("Exception was raised in the thread but we can still handle it");
}
});
t.start();
}
或者,也可以在可運行本身內添加一些異常捕獲邏輯。
你能提供你的源?異步事件引起的異常也可以用適當的設計來處理。 – assylias
所以,我們不能使用PrimeNumbersFoundException知道,如果A = B * C在同一時間有什麼素數? –
@assylias看起來像「Jave For Programmers」http://books.google.com/books?id=Xq9P8xly6iUC&pg=PA301&lpg=PA301&dq=%22Exception+handling+is+not+designed+to+process+problems+associated+with +異步%22&source = bl&ots = -AJ6ABwzFd&sig = JynRXmydQ-w9LWDLuenLKOiSUqc&hl = en&sa = X&ei = 2IfNUbzNBonJ0QHbioGQDQ&dd=0CDAQ6AEwAQ – CPerkins