關(guān)於線程監(jiān)控重啟的問題我看了
http://www.cnblogs.com/ae6623...
這篇文章介紹的觀察者模式我看他是把重啟線程的關(guān)鍵程式碼放到了線程體中的catch塊中哪如果是沒有捕獲到的異常怎麼辦額我異常不太了解那個Exception 類是所有異常都能捕獲到麼,如果這樣的話還會不會有遺漏的線程死亡原因不能監(jiān)控到呢
歡迎選擇我的課程,讓我們一起見證您的進步~~
Exception
是所有異常類的父類, catch(Exception)
能捕捉到所有的異常
通常異常又分為Exception
和RuntimeException
Exception
必須捕獲, 發(fā)生異常時, 會執(zhí)行catch
中的業(yè)務(wù)
RuntimeException
, 發(fā)生異常時, 如果不捕獲會中斷當(dāng)前線程, 如果捕獲和Exception
一樣
通常線程退出(死亡)的條件
線程業(yè)務(wù)執(zhí)行完畢
執(zhí)行緒發(fā)生未捕獲的RuntimeException
你給的文章中重啟線程的本質(zhì)是讓上一個線程A
已經(jīng)結(jié)束了(break
), 調(diào)用Observable#notifyObservers()
重新啟動了一個線程A1
,也就是說如果沒有調(diào)用Observable#notifyObservers()
的話, 是不會重啟線程的.
所以, 如果在呼叫Observable#notifyObservers()
之前發(fā)生了Observable#notifyObservers()
之前發(fā)生了RuntimeException
, 而且未捕獲的話, 線程也就不會重啟了.
一般情況下被觀察的線程異常發(fā)生位置可以確定,在確定的位置捕捉??異常並重啟線程。題主連結(jié)的處理方法是可行的。