/** * 对监视线程的抽象。封装一种特殊的线程行为:一旦被创建就永远循环地做某件事情, * 直到该线程被杀死。这是一个抽象类,从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(); }
相关推荐
demoEnhanceThread.java 使用自己定义的线程类示例 producer_consumer.java 演示生产者-消费者线程 consumer.java 消费者线程 producer.java 生产者线程 common.java 公有类 第9章 示例描述:本章学习运行时...
有一个按钮和标签,标签可以在上面画线,单击按钮后则进入无限循环。
StackTraceSealer是一个JConsole插件,具有自己的Java代理库,可用于密封线程堆栈跟踪中的堆栈框架,以检测这些框架是否已更改或始终保持不变,以帮助在生产中查找无限循环当您拥有的所有系统都是线程转储中看似很长...
服务器采用多线程以满足多用户的请求,通过JDBC与后台数据库连接,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为8080,然后无限循环调用accept()方法接受客户程序的连接Q系统的设计于实现
服务器采用多线程以满足多用户的请求,通过JDBC与后台数据库连接,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为8080,然后无限循环调用accept()方法接受客户程序的连接 服务器程序代码如下...
C、在Java中一个类不能同时继承一个类和实现一个接口。D、在Java中类只允许单一继承。 17. 下列类定义中,不正确的是(C )。 A) class x { .... } B) class x extends y { .... } 1 C) static class x implements y1...
服务器采用多线程以满足多用户的请求,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为9527,然后无限循环调用accept()方法接受客户程序的连接。 服务器线程源码: package qq.server; import...
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相等测试与...
服务器采用多线程以满足多用户的请求,通过JDBC与后台数据库连接,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为8080,然后无限循环调用accept()方法接受客户程序的连接。 2.客户程序如下...
第11章 Java常用类(教学视频:66分钟) 315 11.1 数学Math类 315 实例186 求圆周率∏值 315 实例187 求对数值 316 实例188 使用取整函数 317 11.2 Random类的使用 318 实例189 随机数 ...
第11章 Java常用类(教学视频:66分钟) 315 11.1 数学Math类 315 实例186 求圆周率∏值 315 实例187 求对数值 316 实例188 使用取整函数 317 11.2 Random类的使用 318 实例189 随机数 319 实例190 验证码 322 11.3 ...
第11章 Java常用类(教学视频:66分钟) 315 11.1 数学Math类 315 实例186 求圆周率∏值 315 实例187 求对数值 316 实例188 使用取整函数 317 11.2 Random类的使用 318 实例189 随机数 319 ...
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相等测试与...
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相等测试与继承 ...
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相等测试与...
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相等测试与...
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相等测试与...
第11章 Java常用类(教学视频:66分钟) 315 11.1 数学Math类 315 实例186 求圆周率∏值 315 实例187 求对数值 316 实例188 使用取整函数 317 11.2 Random类的使用 318 实例189 随机数 319 实例190 验证码 ...
第11章 Java常用类(教学视频:66分钟) 315 11.1 数学Math类 315 实例186 求圆周率∏值 315 实例187 求对数值 316 实例188 使用取整函数 317 11.2 Random类的使用 318 实例189 随机数 319 实例190 验证码 322 11.3 ...