java 線程監(jiān)控 重啟線程 觀察者模式的問(wèn)題的問(wèn)題
問(wèn)題描述
關(guān)于線程監(jiān)控 重啟的問(wèn)題我看了http://www.cnblogs.com/ae6623...這篇文章介紹的觀察者模式 我看他是把重啟線程的關(guān)鍵代碼放到了線程體中的catch塊中 哪如果是沒(méi)有捕獲到的異常怎么辦 額 我異常不太了解 那個(gè)Exception 類是所有異常都能捕獲到么 ,如果這樣的話 還會(huì)不會(huì)有遺漏的線程死亡原因不能監(jiān)控到呢
問(wèn)題解答
回答1:Exception是所有異常類的父類, catch(Exception)能捕獲到所有的異常
通常異常又分為Exception和RuntimeException
Exception必須捕獲, 發(fā)生異常時(shí), 會(huì)執(zhí)行catch中的業(yè)務(wù)
RuntimeException, 發(fā)生異常時(shí), 如果不捕獲會(huì)中斷當(dāng)前線程, 如果捕獲和Exception一樣
通常線程退出(死亡)的條件
線程業(yè)務(wù)執(zhí)行完畢
線程發(fā)生未捕獲的RuntimeException
你給的文章中重啟線程的本質(zhì)是讓上一個(gè)線程A已經(jīng)結(jié)束了(break), 調(diào)用Observable#notifyObservers()重新啟動(dòng)了一個(gè)線程A1,也就是說(shuō)如果沒(méi)有調(diào)用Observable#notifyObservers()的話, 是不會(huì)重啟線程的.
所以, 如果在調(diào)用Observable#notifyObservers()之前發(fā)生了RuntimeException, 而且未捕獲的話, 線程也就不會(huì)重啟了.
回答2:一般情況下被觀察的線程異常發(fā)生位置可以確定,在確定的位置捕捉異常并重啟線程。題主連接的處理方法是可行的。
相關(guān)文章:
1. python執(zhí)行cmd命令,怎么讓他執(zhí)行類似Ctrl+C效果將其結(jié)束命令?2. MySQL主鍵沖突時(shí)的更新操作和替換操作在功能上有什么差別(如圖)3. node.js - 微信小程序websocket連接問(wèn)題4. Python從URL中提取域名5. 實(shí)現(xiàn)bing搜索工具urlAPI提交6. Python中使用超長(zhǎng)的List導(dǎo)致內(nèi)存占用過(guò)大7. python - Django有哪些成功項(xiàng)目?8. python - scrapy url去重9. 數(shù)據(jù)庫(kù) - Mysql的存儲(chǔ)過(guò)程真的是個(gè)坑!求助下面的存儲(chǔ)過(guò)程哪里錯(cuò)啦,實(shí)在是找不到哪里的問(wèn)題了。10. 鏈接圖片時(shí),鏈接不成功
