线程加监听功能 【意外退出线程后自动重启】
2019-03-26 本文已影响62人
Helloword_Cc
Java线程监听,意外退出线程后自动重启
业务需求:因为作者的业务需要线程一直循环监听某个端口发过来的数据并进行分析处理。然而发现循环某次线程出现未知错误会导致整个监听线程自动终止。所以需要线程某次出现错误中止时可以监听到,并且重新启动监听数据的线程。让监听业务不会断开。下面介绍如何实现:
首先添加一个Listener类,为监听类。
![](https://img.haomeiwen.com/i14814666/30eaf3b6ce1055c4.png)
然后重写监听类的update方法,其实这个方法就是在线程出现未知异常,线程被迫终止的时候调用,因为作者想当线程出现未知错误终止的时候,程序自动重新启动,所以就在update的方法继续启动这个线程。
![](https://img.haomeiwen.com/i14814666/91610ce3dab261e3.png)
好了,到这里监听类就写完了。接下来就是线程类。线程类除了常规实现Runnable,还需要继承Observable
![](https://img.haomeiwen.com/i14814666/0b2ce1638a8b0e5b.png)
线程类除了继承的改动,第一步:需要添加一个doBusiness方法,
![](https://img.haomeiwen.com/i14814666/837e868d144d027e.png)
第二步:则是在run方法进行try catch,catch的时候执行doBusiness方法,进行监听并调用重启线程操作
(还有一个问题:在catch的时候必须break进行跳出循环)
![](https://img.haomeiwen.com/i14814666/df62427e15308a33.png)
好了,到了最后一个步骤了。就是改动
main类主线程
第三步:需要将监听的线程通过addObserver方法加入执行线程里,再启动执行线程
![](https://img.haomeiwen.com/i14814666/f4a5ca75a1f10253.png)