关于Java线程意外退出自动重启..
最近做项目使用到第三方推送功能,然后创建了一个线程用来循环读取队列中的数据,当队列为空时,则线程暂停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线程意外退出自动重启..的更多相关文章
- 【运维技术】shell脚本实现线程挂掉,自动重启功能
由于分布式系统的流行,服务器上面部署的项目都是多实例的.而我又希望有一个功能,当服务器出现异常情况能够自动重启实例. 所以我想到了使用shell脚本监控实例进程id,如果不存在的话,就重启对应的实例. ...
- window程序意外关闭自动重启脚本实现
@echo off : tasklist|find /i "xxxx"||start yyyy ping/n 127.1>nul 新建 .bat 文件,将其写入文件 xxxx ...
- Supervisor多进程管理 异常自动重启 可视化管理
一.序言 Supervisor是多进程管理工具,在Docker中相关联的进程能够通过supervisor来管理. 微服务项目开发阶段,可用于微服务子项目的启动管理. 支持web可视化管理,能够极大方面 ...
- Java线程监听,意外退出线程后自动重启
Java线程监听,意外退出线程后自动重启 某日,天朗气清,回公司,未到9点,刷微博,顿觉问题泛滥,惊恐万分! 前一天写了一个微博爬行程序,主要工作原理就是每隔2分钟爬行一次微博,获取某N个关注朋友微博 ...
- 用Supervisor实现进程守护,在异常退出时自动重启
程序启动后,有些是以daemon的形式运行,但在意外退出后,如果不能及时重新启动,会有比较严重的影响. 比如Zimg在图片处理中由于某些图片处理失败,会导致zimg进程挂掉,影响正常的服务提供,并且只 ...
- C#WinForm程序异常退出的捕获、继续执行与自动重启
本文参考网上搜索的信息,并做了适当修改可以让捕捉到异常之后阻止程序退出. 另给出了通过命令行自动重启的方法. 如果一个线程里运行下面的代码 ; / a; 将会导致程序自动结束,而且没有任何提示信息 但 ...
- window下进程退出后自动重启
设计思想:编写批处理脚本监控进程的运行状态,如果发现进程停止,则自动重启该进程.批处理脚本(jk.bat)和进程脚本(hello.bat)如下: 1.jk.bat @echo off rem 定义需监 ...
- java通过ftp和sftp上传war包上传到Linux服务器实现自动重启tomcat的脚本代码
ar包自动上传Linux并且自动重启tomcat 用的是jdk1.7出的文件监控 支持ftp和sftp,支持多服务器负载等 配置好config 非maven项目导入直接使用 #\u76D1\u542C ...
- Eclipse修改java代码后自动重启Tomcat解决办法
今天甚是郁闷,项目马上要上线了,早上刚到公司打开MyEclipse 10.07提示过期提示,这对于用惯了破解软件的帝国用户的我原本以为小菜一碟. 于是到网上到处找破解软件,不用多长时间,Ok 破解成功 ...
随机推荐
- 循序渐进Python3(十)-- 1 -- pymysql
使用pymsql 模块操作数据库 #!/usr/bin/env python , ),()]), user='root', passwd='123456', db='test')# 创建游标curso ...
- TDI - Transport Driver Interface
[TDI - Transport Driver Interface] The Transport Driver Interface or TDI is the protocol understood ...
- JS正则2
正则表达式可以:•测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或一个信用卡号码模式.这称为数据有效性验证•替换文本.可以在文档中使用一个正则表达式来标 ...
- JSP计算器
<%@ page language= "java" contentType="text/html;charset=UTF-8" %><html ...
- Window10+VS2015+DevExpress.net 15.1.7完美破解(图)
终于找到一个可用的破解工具了,并更新到最新的组件包DevExpressComponents-15.1.7.15288.exe,先看图 破解方法: 先安装DevExpressUniversalTrial ...
- 预习笔记 多态 --S2 4.3
第三章 多态 polymorphism 多态 instance 例子override 重载 constructor 构造器ClassCastException 类型转换异常upcasting 上抛 d ...
- iOS 判断设备型号
+ (NSString*)deviceString { // 需要#import "sys/utsname.h" struct utsname systemInfo; uname( ...
- 转载:shell脚本之sed使用----替换、变量、转义字符
sed替换的基本语法为:----s后面跟的是分隔符,原字符串可使用.*这种正则表达式进行整行替换 代码如下: sed 's/原字符串/替换字符串/' 单引号里面,s表示替换,三根斜线中间是替换的样式, ...
- Android 7.0 UICC 分析(一)
UICC(Universal Intergrated Circuit Card) 框架 * Following is class diagram for uicc classes: * * UiccC ...
- Splinter学习--初探3,两种方式登录QQ邮箱
目前,qq邮箱的登录方式有: 1.利用账号.密码登录 2.快捷登录,前提是你本地已有qq账号登录中 和前面一样,还是先到qq邮箱登录首页,审查页面元素,找到我们进行登录操作所相关的链接.按钮或是输入框 ...