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();
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值