意外退出线程后自动重启的实现方法.docxVIP

意外退出线程后自动重启的实现方法.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
意外退出线程后自动重启的实现方法 自动重启故障相信大家都遇到过,原因也有很多,跟系统, 硬件或者外界因素都有关。下面小编就为大家带来一篇 Java 线程监 听,意外退出线程后自动重启的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 Java 线程监听,意外退出线程后自动重启 前一天写了一个微博爬行程序,主要工作原理就是每隔 2 分钟爬行一次微博,获取某 N 个关注朋友微博数量,然后将其保存 起来, 2 分钟之后再次爬行,再取 其微博数量,与 2 分钟前保存的 微博数量比较,如果数量增加,说明该好友在此 2 分钟之内发布微博, 如果数量减少,则是删除微博。最后将爬行结果发送到指定手机上, 作为通知 ! 今天看微博时发现自己关注的朋友发布了微博, 然而自己手 机却没有收到报警消息, 查看爬行日志发现, 在凌晨 6 点钟时,公司 网络曾经断网,导致网络堵 塞,程序在爬行的时候抛出网络异常 1 UnknownHostException ,此时线程就已经死掉,猝死。为解决此 问题,现有如下需求:线程死掉之后会自动重启。 常规解决办法有 2 种: 1,开启另外一个线程,监听爬行线程,使用线程之间的通信,一般是消费者模式,如果爬行线程死掉之后,监听线程会收到通知,但是如果监听线程先死掉,那么系统也就挂了 ! 2,使用心跳机制,爬行线程每隔一段时间往另一服务器进 程发送数据包, 如果服务器进程长时间没有收到心跳包, 则说明爬行 线程已经死机 ! 两种方法都有合适的使用范围, 但是对于监听线程猝死这种情况,个人觉得是使用观察者模式比较合适 ! 现说明一下观察者模式。 观察者模式:定义对象之间的一种一对多的依赖关系, 当对象的状态发生改变时, 所有依赖于它的对象都得到通知并且被自动更新。 观察者模式在 JDK 中有现成的实现, java.util.Obserable , 如何进行监听线程,请看例子: 2 被监听的线程类: package cn.std.test; import java.util.Observable; import cn.std.util.DateUtil; public class RunThread extends Observableimplements Runnable{ 此方法一经调用,立马可以通知观察者,在本例中是监 听线程 publicvoid doBusiness(){ if(true){ super.setChanged(); } 3 notifyObservers(); } @Override publicvoid run() { intc = 0; while(true){ // 模拟线程运行一段时间之后退出 System.out.println(quot;Runing- quot;+c+quot; quot;+DateUtil.getStdDateTime()); try{ Thread.sleep(2000); }catch (InterruptedException e) { 4 e.printStackTrace(); doBusiness(); break; } c++; 模拟抛出异常 try{ if(c== 4){ Stringstr = null; str.length();// 此处将会抛出空指针异常 } 5 }catch (Exception e) { e.printStackTrace(); doBusiness();// 在抛出异常时调用, 通知观察者,让其重启 线程 break;// 异常抛出之后,一定要跳出循环,保证将线程送进 地狱 } } } publicstatic void main(String[] args) { RunThreadrun = new RunThread(); Listener listen = new Listener(); 6 un.addObserver(listen); newThread(run).start(); //run.doBusiness(); } } 被监听的线程需要继承 Observable 类,继承之后轻松变身 为被观察者 doBusiness 方法,此处可以加上你的业务处理内容,接 下来是 Listener package cn.std.test; import java.util.Observable; import java.util.Observer; public class Listener implements Observer{ 7 @Override publicvoid update(Observable o, Object arg) { System.out.pri

文档评论(0)

q96tcntzow + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档