java 线程意外退出,关于Java线程意外退出自动重启..

最近做项目使用到第三方推送功能,然后创建了一个线程用来循环读取队列中的数据,当队列为空时,则线程暂停2秒.一切都像想象中的辣么美好.可是在后面的测试中发现收不到推送的消息了,接着发现了原来推送的线程由于抛出异常直接挂了,然后百度了一下解决方案,感谢前辈们为我们指明了方向.发现了使用Java中的观察者模式可以很好的解决这个问题,下面是我写的测试代码...

首先是一个线程类继承Observable实现Runnable,注意catch中的代码:

packagecom.lifesense;importjava.util.Observable;importjava.util.concurrent.BrokenBarrierException;public class PushServie extends Observable implementsRunnable {//此方法一经调用,立马可以通知观察者,在本例中是监听线程

public voiddoBusiness() {if (true) {super.setChanged();

}

notifyObservers();

}

@Overridepublic voidrun() {while (true) {

System.out.println("线程运行了");try{

Thread.sleep(1000);if (1 == 1) {throw new RuntimeException("线程挂了");

}

}catch(Exception e) {

e.printStackTrace();

doBusiness();break;

}

}

}public static voidmain(String[] args) {

PushServie ps= newPushServie();

Listener listener= newListener();

ps.addObserver(listener);newThread(ps).start();

}

}

后面是一个监听这个线程的类,只要实现Observer接口就行了:

packagecom.lifesense;importjava.util.Observable;importjava.util.Observer;public class Listener implementsObserver {

@Overridepublic voidupdate(Observable o, Object arg) {

System.out.println("RunThread死机");

PushServie run= newPushServie();

run.addObserver(this);newThread(run).start();

System.out.println("RunThread重启");

}

}

运行一下main方法结果:

79d0a839433eff8cd3e77948c4090ff6.png

本人属于菜鸟一枚,如果你发现有什么不妥的欢迎批评指正,我的QQ:821196632,欢迎大家加我qq共同学习..

原文:http://www.cnblogs.com/xiao-yang1990/p/4799632.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值