麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Java > 正文

java多線程中的異常處理機制簡析

2019-11-26 16:18:14
字體:
來源:轉載
供稿:網友
在java多線程程序中,所有線程都不允許拋出未捕獲的checked exception,也就是說各個線程需要自己把自己的checked exception處理掉。這一點是通過java.lang.Runnable.run()方法聲明(因為此方法聲明上沒有throw exception部分)進行了約束。但是線程依然有可能拋出unchecked exception,當此類異常跑拋出時,線程就會終結,而對于主線程和其他線程完全不受影響,且完全感知不到某個線程拋出的異常(也是說完全無法catch到這個異常)。JVM的這種設計源自于這樣一種理念:“線程是獨立執行的代碼片斷,線程的問題應該由線程自己來解決,而不要委托到外部。”基于這樣的設計理念,在Java中,線程方法的異常(無論是checked還是unchecked exception),都應該在線程代碼邊界之內(run方法內)進行try catch并處理掉.

但如果線程確實沒有自己try catch某個unchecked exception,而我們又想在線程代碼邊界之外(run方法之外)來捕獲和處理這個異常的話,java為我們提供了一種線程內發生異常時能夠在線程代碼邊界之外處理異常的回調機制,即Thread對象提供的setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)方法。

通過該方法給某個thread設置一個UncaughtExceptionHandler,可以確保在該線程出現異常時能通過回調UncaughtExceptionHandler接口的public void uncaughtException(Thread t, Throwable e) 方法來處理異常,這樣的好處或者說目的是可以在線程代碼邊界之外(Thread的run()方法之外),有一個地方能處理未捕獲異常。但是要特別明確的是:雖然是在回調方法中處理異常,但這個回調方法在執行時依然還在拋出異常的這個線程中!

比之上述方法,還有一種編程上的處理方式可以借鑒,即,有時候主線程的調用方可能只是想知道子線程執行過程中發生過哪些異常,而不一定會處理或是立即處理,那么發起子線程的方法可以把子線程拋出的異常實例收集起來作為一個Exception的List返回給調用方,由調用方來根據異常情況決定如何應對。不過要特別注意的是,此時子線程早以終結。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 最新av在线播放 | 91av原创 | 国产精品久久久久久久久久久久午夜 | 9丨九色丨国产 | 欧美性受ⅹ╳╳╳黑人a性爽 | 精品国产一区三区| 日本搞逼视频 | 最新一区二区三区 | 在线中文字幕亚洲 | 国产精品成人一区二区三区吃奶 | 成人一区二区在线观看视频 | 国产 视频 一区二区 | 永久免费不卡在线观看黄网站 | 国产精品久久久久久久午夜片 | 国产69精品久久久久9999不卡免费 | 成人免费av在线 | 欧美成人精品一区 | 最新中文字幕在线视频 | 九色免费视频 | 亚洲第一成人在线视频 | 欧美a级大胆视频 | 黄色网址在线免费 | 精品国产91久久久久久久 | 蜜桃麻豆视频 | 免费看成人毛片 | 久久久国产精品视频 | 国产一区毛片 | 色悠悠久久久久 | 视频一区二区三区在线播放 | 激情网站免费观看 | 久久影院国产精品 | 91福利社在线 | 4p一女两男做爰在线观看 | 亚洲成人播放 | 成人午夜视频在线观看 | 国产乱淫av | 日韩精品久久久久久 | 羞羞的| 中文在线免费观看 | 久草干 | 在线看免费观看日本 |