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 類(lèi)是所有異常都能捕獲到么 ,如果這樣的話 還會(huì)不會(huì)有遺漏的線程死亡原因不能監(jiān)控到呢
問(wèn)題解答
回答1:Exception是所有異常類(lèi)的父類(lèi), 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. node.js - mongodb查找子對(duì)象的名稱(chēng)為某個(gè)值的對(duì)象的方法2. docker 17.03 怎么配置 registry mirror ?3. docker 下面創(chuàng)建的IMAGE 他們的 ID 一樣?這個(gè)是怎么回事????4. 前端 - @media query 使用出現(xiàn)的問(wèn)題?5. html5 - datatables 加載不出來(lái)數(shù)據(jù)。6. 運(yùn)行python程序時(shí)出現(xiàn)“應(yīng)用程序發(fā)生異常”的內(nèi)存錯(cuò)誤?7. 測(cè)試自動(dòng)化html元素選擇器元素ID或DataAttribute [關(guān)閉]8. javascript - QQ第三方登錄的問(wèn)題9. 利用IPMI遠(yuǎn)程安裝centos報(bào)錯(cuò)!10. spring-mvc - spring-session-redis HttpSessionListener失效

網(wǎng)公網(wǎng)安備