java线程帮助类(无限循环)_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > java线程帮助类(无限循环)

java线程帮助类(无限循环)

 2014/4/10 0:47:25  征途2010  程序员俱乐部  我要评论(0)
  • 摘要:/***对监视线程的抽象。封装一种特殊的线程行为:一旦被创建就永远循环地做某件事情,*直到该线程被杀死。这是一个抽象类,从Thread类继承而来,不能直接实例化,其子类需要覆盖方法task()来完成具体的功能。**@version1.0*/publicabstractclassWatchThreadextendsThread{/**该线程存活标志,kill()方法将该标志置为false。*/privatebooleanalive=true;/**当前线程状态信息。用于告知外界该线程正在做什么
  • 标签:Java 线程 循环
class="java" name="code">/**
 * 对监视线程的抽象。封装一种特殊的线程行为:一旦被创建就永远循环地做某件事情,
 * 直到该线程被杀死。这是一个抽象类,从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();
}

?

上一篇: java中final修饰符的用法 下一篇: 没有下一篇了!
发表评论
用户名: 匿名