`
征途2010
  • 浏览: 243311 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

 

分享到:
评论
1 楼 鹏哥仔好靓仔 2016-01-25  
[i][u]
引用
引用
[u][i][b]的撒旦[/b][/i][/u]
[/u][/i]

相关推荐

    Java开发技术大全(500个源代码).

    demoEnhanceThread.java 使用自己定义的线程类示例 producer_consumer.java 演示生产者-消费者线程 consumer.java 消费者线程 producer.java 生产者线程 common.java 公有类 第9章 示例描述:本章学习运行时...

    单线程的绘图程序,有一个按钮和标签,标签可以在上面画线,单击按钮后则进入无限循环。

    有一个按钮和标签,标签可以在上面画线,单击按钮后则进入无限循环。

    StackTraceSealer:帮助在生产系统上的Java程序中查找无限循环-开源

    StackTraceSealer是一个JConsole插件,具有自己的Java代理库,可用于密封线程堆栈跟踪中的堆栈框架,以检测这些框架是否已更改或始终保持不变,以帮助在生产中查找无限循环当您拥有的所有系统都是线程转储中看似很长...

    java语言编写的 聊天程序

    服务器采用多线程以满足多用户的请求,通过JDBC与后台数据库连接,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为8080,然后无限循环调用accept()方法接受客户程序的连接Q系统的设计于实现

    基于JAVA的聊天系统的设计于实现

    服务器采用多线程以满足多用户的请求,通过JDBC与后台数据库连接,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为8080,然后无限循环调用accept()方法接受客户程序的连接 服务器程序代码如下...

    Java程序设计复习题.docx

    C、在Java中一个类不能同时继承一个类和实现一个接口。D、在Java中类只允许单一继承。 17. 下列类定义中,不正确的是(C )。 A) class x { .... } B) class x extends y { .... } 1 C) static class x implements y1...

    基于JAVA的聊天系统的设计与实现

    服务器采用多线程以满足多用户的请求,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为9527,然后无限循环调用accept()方法接受客户程序的连接。 服务器线程源码: package qq.server; import...

    Java2核心技术.part5

    4.2.2 Java库中的GregorianCalendar类 4.2.3更改器方法与访问器方法 4.3用户自定义类 4.3.1一个Employee类 4.3.2多个源文件的使用 4.3.3解析Employee类 4.3.4从构造器开始 5.2.2相等测试与...

    基于Java聊天系统(java+applet).zip

    服务器采用多线程以满足多用户的请求,通过JDBC与后台数据库连接,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为8080,然后无限循环调用accept()方法接受客户程序的连接。 2.客户程序如下...

    java范例开发大全源代码

     第11章 Java常用类(教学视频:66分钟) 315  11.1 数学Math类 315  实例186 求圆周率∏值 315  实例187 求对数值 316  实例188 使用取整函数 317  11.2 Random类的使用 318  实例189 随机数 ...

    java范例开发大全

    第11章 Java常用类(教学视频:66分钟) 315 11.1 数学Math类 315 实例186 求圆周率∏值 315 实例187 求对数值 316 实例188 使用取整函数 317 11.2 Random类的使用 318 实例189 随机数 319 实例190 验证码 322 11.3 ...

    Java范例开发大全 (源程序)

     第11章 Java常用类(教学视频:66分钟) 315  11.1 数学Math类 315  实例186 求圆周率∏值 315  实例187 求对数值 316  实例188 使用取整函数 317  11.2 Random类的使用 318  实例189 随机数 319  ...

    Java2核心技术.part3

    4.2.2 Java库中的GregorianCalendar类 4.2.3更改器方法与访问器方法 4.3用户自定义类 4.3.1一个Employee类 4.3.2多个源文件的使用 4.3.3解析Employee类 4.3.4从构造器开始 5.2.2相等测试与...

    Java2核心技术.part1

    4.2.2 Java库中的GregorianCalendar类 4.2.3更改器方法与访问器方法 4.3用户自定义类 4.3.1一个Employee类 4.3.2多个源文件的使用 4.3.3解析Employee类 4.3.4从构造器开始 5.2.2相等测试与继承 ...

    Java2核心技术.part6

    4.2.2 Java库中的GregorianCalendar类 4.2.3更改器方法与访问器方法 4.3用户自定义类 4.3.1一个Employee类 4.3.2多个源文件的使用 4.3.3解析Employee类 4.3.4从构造器开始 5.2.2相等测试与...

    Java2核心技术.part4

    4.2.2 Java库中的GregorianCalendar类 4.2.3更改器方法与访问器方法 4.3用户自定义类 4.3.1一个Employee类 4.3.2多个源文件的使用 4.3.3解析Employee类 4.3.4从构造器开始 5.2.2相等测试与...

    Java2核心技术.part2

    4.2.2 Java库中的GregorianCalendar类 4.2.3更改器方法与访问器方法 4.3用户自定义类 4.3.1一个Employee类 4.3.2多个源文件的使用 4.3.3解析Employee类 4.3.4从构造器开始 5.2.2相等测试与...

    Java范例开发大全(全书源程序)

    第11章 Java常用类(教学视频:66分钟) 315 11.1 数学Math类 315 实例186 求圆周率∏值 315 实例187 求对数值 316 实例188 使用取整函数 317 11.2 Random类的使用 318 实例189 随机数 319 实例190 验证码 ...

    java范例开发大全(pdf&源码)

    第11章 Java常用类(教学视频:66分钟) 315 11.1 数学Math类 315 实例186 求圆周率∏值 315 实例187 求对数值 316 实例188 使用取整函数 317 11.2 Random类的使用 318 实例189 随机数 319 实例190 验证码 322 11.3 ...

Global site tag (gtag.js) - Google Analytics