84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
關於線程監控重啟的問題我看了http://www.cnblogs.com/ae6623...這篇文章介紹的觀察者模式我看他是把重啟線程的關鍵程式碼放到了線程體中的catch塊中哪如果是沒有捕獲到的異常怎麼辦額我異常不太了解那個Exception 類是所有異常都能捕獲到麼,如果這樣的話還會不會有遺漏的線程死亡原因不能監控到呢
欢迎选择我的课程,让我们一起见证您的进步~~
Exception是所有异常类的父类, catch(Exception)能捕捉到所有的異常
Exception
catch(Exception)
通常異常又分為Exception和RuntimeException
RuntimeException
Exception必须捕获, 发生异常时, 会执行catch中的業務
catch
RuntimeException, 发生异常时, 如果不捕获会中断当前线程, 如果捕获和Exception一樣
通常線程退出(死亡)的條件
線程業務執行完畢
執行緒發生未捕獲的RuntimeException
你給的文章中重啟線程的本質是讓上一個線程A已经结束了(break), 调用Observable#notifyObservers()重新启动了一个线程A1,也就是说如果没有调用Observable#notifyObservers()的話, 是不會重啟線程的.
A
break
Observable#notifyObservers()
A1
所以, 如果在呼叫Observable#notifyObservers()之前發生了Observable#notifyObservers()之前发生了RuntimeException, 而且未捕獲的話, 線程也就不會重啟了.
一般情況下被觀察的線程異常發生位置可以確定,在確定的位置捕捉異常並重啟線程。題主連結的處理方法是可行的。
Exception
是所有异常类的父类,catch(Exception)
能捕捉到所有的異常通常異常又分為
Exception
和RuntimeException
Exception
必须捕获, 发生异常时, 会执行catch
中的業務RuntimeException
, 发生异常时, 如果不捕获会中断当前线程, 如果捕获和Exception
一樣通常線程退出(死亡)的條件
線程業務執行完畢
執行緒發生未捕獲的
RuntimeException
你給的文章中重啟線程的本質是讓上一個線程
A
已经结束了(break
), 调用Observable#notifyObservers()
重新启动了一个线程A1
,也就是说如果没有调用Observable#notifyObservers()
的話, 是不會重啟線程的.所以, 如果在呼叫
Observable#notifyObservers()
之前發生了Observable#notifyObservers()
之前发生了RuntimeException
, 而且未捕獲的話, 線程也就不會重啟了.一般情況下被觀察的線程異常發生位置可以確定,在確定的位置捕捉異常並重啟線程。題主連結的處理方法是可行的。