- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
                您可能关注的文档
最近下载
- HG/T 2431-2018- 水处理剂_阻垢缓蚀剂Ⅲ.pdf VIP
- 上海市青浦XX中学高三下学期期中考试历史试卷.docx VIP
- 关于进一步加强“安全生产基础台账”管理工作的通知.pdf VIP
- 2024-2025学年湖南机电职业技术学院单招《职业适应性测试》复习提分资料(培优)附答案详解.docx VIP
- 2025下半年浙江绍兴市公安局警务辅助人员招聘55人笔试备考题库及答案解析.docx VIP
- 山宇SY8000变频器说明书用户手册.pdf
- 贝加莱(B&R)PLC_CF卡烧写说明PVI.docx VIP
- 电子信息工程应届生工作简历模板PPT.pptx VIP
- 上海市进才中学2024-2025学年高三上英语9月月考(含答案).docx VIP
- 年处理2000吨桑叶提取车间布置设计常晓利.docx VIP
 原创力文档
原创力文档 
                        

文档评论(0)