Java,
分享于 点击 16140 次 点评:154
Java,
/*** 对监视线程的抽象。封装一种特殊的线程行为:一旦被创建就永远循环地做某件事情,
* 直到该线程被杀死。这是一个抽象类,从Thread类继承而来,不能直接实例化,其子类 需要覆盖方法task()来完成具体的功能。
*
* @version 1.0
*/
public abstract class WatchThread extends Thread {
/** 该线程存活标志,kill()方法将该标志置为false。 */
private boolean alive = true;
/** 当前线程状态信息。用于告知外界该线程正在做什么。 */
private String status = null;
/** 该类的所有子类对象均创建到这个线程组中。 */
public static final ThreadGroup tg = new ThreadGroup("watch-thread");
/**
* 构造函数,提供一个线程名参数。构造方法只创建线程,并不启动。
*
* @param name
* 线程的名字,为线程起个好名字对调试和日志记录很有帮助。
*/
public WatchThread(String name) {
super(tg, name);
setDaemon(true); // 设置成精灵线程(程序在只剩下精灵线程运行时将自动结束)
}
/**
* 杀死该线程的方法,将alive标志置为false,当run()方法的while循环发现该标志为
* false时将跳出循环结束线程。需注意的是kill()方法返回时并不一定线程立即死掉。 要等到线程主体从一次task()方法返回后才会结束。
*/
public void kill() {
alive = false;
}
/**
* 线程主体,循环运行task()方法,直到调用了kill()方法。
*/
/**
* public void run() {
*
* //无论出现什么异常都不能使该线程终止! while (alive) { try { task(); } catch (Exception ex)
* { ex.printStackTrace(); } catch (Throwable t) { //出现严重错误,搞不好系统会死掉
* t.printStackTrace(); } } }
**/
public void run() {
// 无论出现什么异常都不能使该线程终止!
while (alive) {
try {
task();
} catch (Exception ex) {
ex.printStackTrace();
} catch (Throwable t) { // 出现严重错误,搞不好系统会死掉
t.printStackTrace();
}
}
}
/**
* 设置状态信息。用来告诉外界该线程正在干什么。
*
* @param state
* 新的状态信息。
*/
protected void setStatus(String newStatus) {
this.status = newStatus;
}
/**
* 获取状态信息。告诉外界该线程正在干什么。
*
* @return 状态信息。
*/
public String getStatus() {
return this.status;
}
/**
* 子类必须覆盖的抽象方法,需要循环做的事情。
*/
abstract protected void task();
}
相关文章
- 暂无相关文章
用户点评