意外退出线程后自动重启的实现方法_第1页
意外退出线程后自动重启的实现方法_第2页
意外退出线程后自动重启的实现方法_第3页
意外退出线程后自动重启的实现方法_第4页
意外退出线程后自动重启的实现方法_第5页
已阅读5页,还剩7页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、意外退出线程后自动重启的实现方法自动重启故障相信大家都遇到过,原因也有很多,跟系统,硬件或者外界因素都有关。下面小编就为大家带来一篇Java线程监听,意外退出线程后自动重启的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧Java线程监听,意外退出线程后自动重启前一天写了一个微博爬行程序,主要工作原理就是每隔2分钟爬行一次微博,获取某 N个关注朋友微博数量,然后将其保存 起来,2分钟之后再次爬行,再取 其微博数量,与2分钟前保存的 微博数量比较,如果数量增加,说明该好友在此2分钟之内发布微博, 如果数量减少,则是删除微博。最后将爬行结果发送到指定手机上,

2、作为通知!今天看微博时发现自己关注的朋友发布了微博, 然而自己手 机却没有收到报警消息,查看爬行日志发现,在凌晨6点钟时,公司 网络曾经断网,导致网络堵 塞,程序在爬行的时候抛出网络异常Unkn ow nH ostException,此时线程就已经死掉,猝死。为解决此问题,现有如下需求:线程死掉之后会自动重启。常规解决办法有2种:1,开启另外一个线程,监听爬行线程,使用线程之间的通 信,一般是消费者模式,如果爬行线程死掉之后,监听线程会收到通 知,但是如果监听线程先死掉,那么系统也就挂了 !2,使用心跳机制,爬行线程每隔一段时间往另一服务器进程发送数据包,如果服务器进程长时间没有收到心跳包,则

3、说明爬行线程已经死机!两种方法都有合适的使用范围,但是对于监听线程猝死这种 情况,个人觉得是使用观察者模式比较合适!现说明一下观察者模式。观察者模式:定义对象之间的一种一对多的依赖关系,当对象的状态发生改变时,所有依赖于它的对象都得到通知并且被自动更 新。观察者模式在JDK中有现成的实现,java.util.Obserable ,如何进行监听线程,请看例子:被监听的线程类:package cn. std.test;import java.util.Observable;import cn. std.util.DateUtil;public classRun Threadexte ndsObse

4、rvableimpleme nts Runn able/此方法一经调用,立马可以通知观察者,在本例中是监听线程publicvoid doBus in ess()if(true)super.setCha nged();3e.pri ntStackTrace();Overridepublicvoid run() intc = 0;while(true) /模拟线程运行一段时间之后退出System.out.pri ntl n(&qu ot;R uning-"+c+&qu ot;"+DateUtil.getStdDateTime();tryThrea

5、d.sleep(2000);catch (In terruptedExcepti on e) doBus in ess();break;C+;/模拟抛出异常tryif(c= 4)Strin gstr = n ull;str.le ngth();此处将会抛出空指针异常5un .addObserver(liste n);e.pri ntStackTrace();doBusiness();在抛出异常时调用,通知观察者,让其重启 线程break;/异常抛出之后,一定要跳出循环,保证将线程送进 地狱publicstatic void main( Stri ng args) Run Threadr un

6、二 new Run Thread();Liste ner liste n 二 new Liste ner();n ewThread(ru n).start();/run. doBus in ess();被监听的线程需要继承Observable类,继承之后轻松变身 为被观察者doBus in ess方法,此处可以加上你的业务处理内容,接 下来是Listenerpackage cn. std.test;import java.util.Observable;import java.util.Observer;public class Liste ner impleme nts Observer7p

7、ublicvoid update(Observable o, Object arg) System.out.pri ntln(&qu ot;R un Thread死机 ");Run Threadr un 二 new Run Thread();run .addObserver(this);n ewThread(ru n).start();System.out.pri ntln(&qu ot;R un Thread重启 ");很简单,只要实现Observer接口,实现其update方法,在方法内部重启线程补充:电脑总是自动重启怎么办1、右击“我的

8、电脑”,选择“属性”项2、在打开的系统属性窗口中选择“高级系统设置”项进入。3、在打开的“系统属性”窗口中,切换至“高级”选择卡, 然后点击“系统和故障恢复 设置”按钮。4、在打开的窗口中取消勾选“自动重启启动”项并按确认 即可。5、当电脑在使用的过程中产生蓝屏时,我们就可以进入“系 统日志”管理器中查看产生系统失败的根源啦。 打开“运行”对话框, 输入命令“ eventvwr.msc ”即可查看日志信息,从中定位系统产生 失败的原因。6、当然,我们也可以通过禁用某些开机项来尝试修复系统。 打开“运行”对话框,输入命令“ msconfig ”进入“系统配置实用 程序”界面,勾选“常规”选项卡下

9、的“诊断启动”选项。7、还有一种修复计算机蓝屏或重启故障的方法,就是在电 脑启动时按“ F8”进入系统故障菜单,从中选择“安全模式”进入或12“最后一次正确的配置”项进入系统,将及有可能修复系统。8、当然,如果以上方法均不能解决问题,那么建议您还是重新安装一下系统,毕竟安装系统所耗费的时间相对修复所用时间要少许多。一劳永逸之事才是王道。相关阅读:电脑自动重启方法方法一:1、打开控制面板-管理工具-计划任务程序2、创建基本任务,名称栏目,输入“定时重启”,下一步;3、在窗口里,有每天、每周、每月、一次各种选择,这里小诚选择一次,这次执行完就失效,您可以根据自己的情况进行选择哈,点击下一步;4、设置重启的日期、时间点,下一步;5、选择启动程序,下一步;6、在打开页面里,点击浏览,找到C;WindowsSystem32Shutdown.exe,点击打开;7、在添加参数栏目里输入“ -r ” (重启),进行下一步8、

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论