摘自 http://my.oschina.net/reachwang/blog/296194
摘要 观察者模式:定义对象之间的一种一对多的依赖关系,当对象的状态发生改变时,所有依赖于它的对象都得到通知并且被自动更新。 观察者模式在JDK中有现成的实现,java.util.Obserable,如何进行监听线程,请看例子:
被监听的线程类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
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();
}
notifyObservers();
}
@Override
publicvoid run() {
intc = 0 ;
while ( true ){ //模拟线程运行一段时间之后退出
System.out.println( "Runing- " +c+ " " +DateUtil.getStdDateTime());
try {
Thread.sleep( 2000 );
} catch (InterruptedException e) {
e.printStackTrace();
doBusiness();
break ;
}
c++;
//模拟抛出异常
try {
if (c== 4 ){
Stringstr = null ;
str.length(); //此处将会抛出空指针异常
}
} catch (Exception e) {
e.printStackTrace();
doBusiness(); //在抛出异常时调用,通知观察者,让其重启线程
break ; //异常抛出之后,一定要跳出循环,保证将线程送进地狱
}
}
}
publicstatic void main(String[] args) {
RunThreadrun = new RunThread();
Listener listen = new Listener();
un.addObserver(listen);
newThread(run).start();
//run.doBusiness();
}
} |
被监听的线程需要继承Observable类,继承之后轻松变身为被观察者doBusiness方法,此处可以加上你的业务处理内容,接下来是Listener
1
2
3
4
5
6
7
8
9
10
11
12
13
|
package cn.std.test;
import java.util.Observable;
import java.util.Observer;
public class Listener implements Observer{
@Override
publicvoid update(Observable o, Object arg) {
System.out.println( "RunThread死机" );
RunThreadrun = new RunThread();
run.addObserver( this );
newThread(run).start();
System.out.println( "RunThread重启" );
}
} |
很简单,只要实现Observer接口,实现其update方法,在方法内部重启线程
相关推荐
Java线程监听、意外退出线程后自动重启的实现方法 Java线程监听是Java编程中的一种重要机制,用于监控和管理线程的生命周期。在实际开发中,我们经常会遇到线程意外退出的情况,例如网络异常、资源不足等原因导致...
通过以上分析,我们可以推测这个程序的工作流程大致如下:Watch.java线程持续监控某些条件(例如日志文件、程序状态文件),当满足特定条件(比如出现错误日志)时,通知主程序Test.java。Test.java接收到信号后,...
它通过一个循环监控Java程序进程,如果检测到程序异常退出,会自动重启程序。同时具有可配置的重启次数和重启间隔时间。 这个小巧但实用的bat脚本实现了一个功能强大的守护进程机制,其可以广泛应用于各种Java程序的高...
2. 另外,还需要考虑程序异常退出或系统意外重启的情况,如何恢复到正确状态也是设计的一部分。 八、测试与调试 1. 测试锁屏功能的全面性和稳定性,确保在各种场景下都能正常工作,例如在不同的操作系统版本上运行...
传统的Java应用程序在启动时,由JVM(Java虚拟机)通过类加载器将类加载到内存中,一旦加载完成,除非程序退出,否则这些类通常不会被重新加载。然而,在开发过程中,我们可能希望在不重启应用的情况下,对已加载的...
Java提供了异常处理框架,允许程序员通过try-catch-finally语句块来捕获和处理可能出现的错误,保证软件在遇到问题时能够优雅地恢复或退出。 8. **日志记录**: 为了便于调试和维护,锁屏软件应包含日志记录功能,...
- **在服务器重启后**:重启服务器会清空所有的session。 - **意外故障**:例如服务器崩溃或网络中断。 #### 二、Java进阶知识点 ##### 1. final关键字的使用 - **不可变性**:声明变量或类成员为final后,其值不...
### Android 退出程序知识点解析 #### 一、概述 在Android开发中,有时我们需要实现一个功能,即当用户连续两次点击返回键时,应用程序能够完全退出。这种需求常见于一些较为复杂的多Activity应用中,目的是为了...
这将杀死当前应用的进程,但是需要注意的是,ActivityManager 会监听进程的状态,一旦发现进程被非正常 Kill,它将会试图去重启这个进程。这就是为什么,有时候当我们试图这样去结束掉应用时,发现 app 会自动重新...
- 考虑到程序重启后仍能保留数据,开发者可能使用了文件系统或者数据库来保存联系人信息。可能的方式包括序列化对象到磁盘,或者使用SQLite这样的轻量级数据库。 5. **文件I/O操作** - 在读取和写入联系人信息时...
|--时间java常用应用 |--时间之handle记时器 |--时间之time的用法得到特定时间的long值 |--时间之之定时任务TimerTask |--时间之倒计时CountDownTimer |--时间之当前时间动态显示 |--时间之自动任务...
守护进程(Daemon)在Unix系统中是指一种在后台运行并持续存在的程序,而在Android中,守护进程常用于保持应用服务即使在用户退出应用后也能持续运行。这种技术对于实现后台任务、定时任务或者持续提供服务的应用...
6. **程序退出与重启**:在更新过程中,如果应用需要退出,应该保存当前的更新进度,以便下次启动时恢复。这需要在退出前将进度信息写入持久化存储,并在启动时读取这些信息,继续执行更新流程。 在这个过程中,...
Job是Eclipse线程支持的一部分,用于执行异步任务,而ISchedulingRule则用于控制任务执行的调度,防止冲突,类似于Java的`synchronized`关键字,但其作用范围更为灵活。 Eclipse的Batching操作是资源管理中的关键...
- **对象存储**:将Java对象序列化后存入RecordStore。 #### 第十六章 RMS编程2:高级知识 **16.1 遍历记录集** - **遍历操作**:通过迭代器遍历所有记录。 **16.2 记录监听** - **监听器**:用于监听记录的增...
使用DownloadManager的好处在于,即使应用退出或设备重启,下载任务也能继续进行。 二、DownloadManager API 要使用DownloadManager,首先需要获取其系统的实例,通过以下代码实现: ```java DownloadManager ...
1. **持久化存储**:SharedPreferences将数据存储在XML文件中,当应用退出或设备重启后,数据依然可以被保留。 2. **简单易用**:通过提供的API,开发者可以方便地进行数据的读取和写入操作。 3. **安全性**:相比于...
当用户登录后,服务器会为该用户创建一个Session对象,存储用户的登录信息,直到Session过期或用户退出。 2. **统计原理** 在线人数统计的基本思路是利用Session来记录活跃用户。每当有用户访问网站时,如果该用户...
6. **广播接收器**:在某些情况下,可能希望在设备重启后继续之前暂停的秒表。这可以通过注册一个`BroadcastReceiver`监听设备开机广播,然后恢复秒表的状态。 7. **数据持久化**:如果需要在应用退出后还能记住...
IntentService是一种特殊的Service,简化了异步任务的处理流程,自动管理线程和生命周期。 #### 28. 屏幕旋转与Activity生命周期 当屏幕旋转时,系统默认会重启Activity,这会影响到Activity的生命周期,需要注意...