java多线程中的异常处理
2019獨角獸企業重金招聘Python工程師標準>>>
在java多線程程序中,所有線程都不允許拋出未捕獲的checked exception,也就是說各個線程需要自己把自己的checked exception處理掉。這一點是通過java.lang.Runnable.run()方法聲明(因為此方法聲明上沒有throw exception部分)進行了約束。但是線程依然有可能拋出unchecked exception,當此類異常跑拋出時,線程就會終結,而對于主線程和其他線程完全不受影響,且完全感知不到某個線程拋出的異常(也是說完全無法catch到這個異常)。JVM的這種設計源自于這樣一種理念:“線程是獨立執行的代碼片斷,線程的問題應該由線程自己來解決,而不要委托到外部。”基于這樣的設計理念,在Java中,線程方法的異常(無論是checked還是unchecked exception),都應該在線程代碼邊界之內(run方法內)進行try catch并處理掉.
通過該方法給某個thread設置一個UncaughtExceptionHandler,可以確保在該線程出現異常時能通過回調UncaughtExceptionHandler接口的public void uncaughtException(Thread t, Throwable e) 方法來處理異常,這樣的好處或者說目的是可以在線程代碼邊界之外(Thread的run()方法之外),有一個地方能處理未捕獲異常。但是要特別明確的是:雖然是在回調方法中處理異常,但這個回調方法在執行時依然還在拋出異常的這個線程中!另外還要特別說明一點:如果線程是通過線程池創建,線程異常發生時UncaughtExceptionHandler接口不一定會立即回調。
轉載于:https://my.oschina.net/pangzhuzhu/blog/326990
總結
以上是生活随笔為你收集整理的java多线程中的异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql 事物
- 下一篇: 推荐20个很有帮助的 Web 前端开发教