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

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

package com.lifesense;

import java.util.Observable;
import java.util.concurrent.BrokenBarrierException; public class PushServie extends Observable implements Runnable { // 此方法一经调用,立马可以通知观察者,在本例中是监听线程
public void doBusiness() {
if (true) {
super.setChanged();
}
notifyObservers();
} @Override
public void run() {
while (true) { System.out.println("线程运行了");
try {
Thread.sleep(1000);
if (1 == 1) {
throw new RuntimeException("线程挂了");
}
} catch (Exception e) {
e.printStackTrace();
doBusiness();
break;
} } } public static void main(String[] args) {
PushServie ps = new PushServie();
Listener listener = new Listener();
ps.addObserver(listener);
new Thread(ps).start(); } }

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

package com.lifesense;

import java.util.Observable;
import java.util.Observer; public class Listener implements Observer { @Override
public void update(Observable o, Object arg) {
System.out.println("RunThread死机");
PushServie run = new PushServie();
run.addObserver(this);
new Thread(run).start();
System.out.println("RunThread重启"); } }

运行一下main方法结果:

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

关于Java线程意外退出自动重启..的更多相关文章

  1. 【运维技术】shell脚本实现线程挂掉,自动重启功能

    由于分布式系统的流行,服务器上面部署的项目都是多实例的.而我又希望有一个功能,当服务器出现异常情况能够自动重启实例. 所以我想到了使用shell脚本监控实例进程id,如果不存在的话,就重启对应的实例. ...

  2. window程序意外关闭自动重启脚本实现

    @echo off : tasklist|find /i "xxxx"||start yyyy ping/n 127.1>nul 新建 .bat 文件,将其写入文件 xxxx ...

  3. Supervisor多进程管理 异常自动重启 可视化管理

    一.序言 Supervisor是多进程管理工具,在Docker中相关联的进程能够通过supervisor来管理. 微服务项目开发阶段,可用于微服务子项目的启动管理. 支持web可视化管理,能够极大方面 ...

  4. Java线程监听,意外退出线程后自动重启

    Java线程监听,意外退出线程后自动重启 某日,天朗气清,回公司,未到9点,刷微博,顿觉问题泛滥,惊恐万分! 前一天写了一个微博爬行程序,主要工作原理就是每隔2分钟爬行一次微博,获取某N个关注朋友微博 ...

  5. 用Supervisor实现进程守护,在异常退出时自动重启

    程序启动后,有些是以daemon的形式运行,但在意外退出后,如果不能及时重新启动,会有比较严重的影响. 比如Zimg在图片处理中由于某些图片处理失败,会导致zimg进程挂掉,影响正常的服务提供,并且只 ...

  6. C#WinForm程序异常退出的捕获、继续执行与自动重启

    本文参考网上搜索的信息,并做了适当修改可以让捕捉到异常之后阻止程序退出. 另给出了通过命令行自动重启的方法. 如果一个线程里运行下面的代码 ; / a; 将会导致程序自动结束,而且没有任何提示信息 但 ...

  7. window下进程退出后自动重启

    设计思想:编写批处理脚本监控进程的运行状态,如果发现进程停止,则自动重启该进程.批处理脚本(jk.bat)和进程脚本(hello.bat)如下: 1.jk.bat @echo off rem 定义需监 ...

  8. java通过ftp和sftp上传war包上传到Linux服务器实现自动重启tomcat的脚本代码

    ar包自动上传Linux并且自动重启tomcat 用的是jdk1.7出的文件监控 支持ftp和sftp,支持多服务器负载等 配置好config 非maven项目导入直接使用 #\u76D1\u542C ...

  9. Eclipse修改java代码后自动重启Tomcat解决办法

    今天甚是郁闷,项目马上要上线了,早上刚到公司打开MyEclipse 10.07提示过期提示,这对于用惯了破解软件的帝国用户的我原本以为小菜一碟. 于是到网上到处找破解软件,不用多长时间,Ok 破解成功 ...

随机推荐

  1. oracle合并版本

    1)   添加字段,并自增 第一步:alter table TOWN add ID int 第二步:Update TOWN set id=rownum; Commit; 2)   更新表(另一张表) ...

  2. The processing instruction target matching ''[xX][mM][lL]" is not allowed

    报错的来源是: <?xml version="1.0" encoding="UTF8"?> 解决方案::,一般是WSDL的头文件的格式出了问题,比如 ...

  3. centos安装python

    安装Development tools yum groups install -y 'development tools' yum install -y zlib-dev openssl-devel ...

  4. 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址

    驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...

  5. JavaScript内置对象之数组

    一.JavaScript对象之数组 1.创建数组的方式 (1)使用Array构造函数 语法:new Array() 小括号()说明: -预先知道数组要保存的项目数量 -向Array构造函数中传递数组应 ...

  6. Fatal error: Allowed memory size of 524288000 bytes exhausted (tried to allocate 64 bytes) in D

    Fatal error: Allowed memory size of 524288000 bytes exhausted (tried to allocate 64 bytes) in D 从数据库 ...

  7. Python SQLAlchemy --2

    本文為 Python SQLAlchemy ORM 一系列教學文: 接下來會更深入地探討查詢的使用. 查詢的基本使用法為 session.query(Mapped Class),其後可加 .group ...

  8. 在Windows下编译扩展OpenCV 3.1.0 + opencv_contrib

    为什么要CMake,这里我陈述自己的想法,作为一个刚使用opencv库的小白来说,有以下大概三点内容 1.由于在学习图像处理滤波器中,需要用到各种边缘保护滤波器(EPS)算法,但是这些算法在OpenC ...

  9. C#图片压缩处理算法

    原文链接:http://blog.csdn.net/szstephenzhou/article/details/38900345

  10. Oracle 服务器端执行带参数的procedure

    进入服务器后 su - oracle sqlplus schema/schemapass 连接上以后,输入以下,然后执行 declare vRet number(5) := 8; begin proc ...