`
征途2010
  • 浏览: 248548 次
  • 性别: 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中一个线程执行死循环有什么后果

    这意味着线程B可以得到CPU时间片并执行其任务,而线程A则一直保持运行状态,因为它被设计成无限循环。 然而,这种情况并不意味着线程A会独占CPU资源。实际上,操作系统会通过时间片轮转的方式分配CPU给各个线程,...

    IBM java线程堆栈分析工具

    总之,IBM的jca467.jar是WAS环境下进行Java线程分析的强大工具,它能够帮助开发者深入洞察应用程序的内部运行情况,有效地定位和解决多线程问题,提升系统的稳定性和性能。通过熟练掌握并运用这个工具,开发者可以在...

    Java多线程详解及示例

    活锁则是指线程不断重试获取资源,但由于其他线程持有资源不释放,导致线程陷入无限循环的状态。避免死锁和活锁的关键在于合理设计资源获取顺序和超时策略。 3.1 死锁的四个必要条件 - 互斥条件:线程对所占有的...

    java通过线程控制程序执行超时(新)

    Java提供了`Thread`类和`Runnable`接口来创建和管理线程。当一个线程运行时间过长,我们需要一种机制来中断它,这就是超时控制的目的。 超时控制通常可以通过两种方式实现:使用Future和Callable接口,或者使用中断...

    Java 多线程介绍

    例如,在示例代码中,如果`t1`线程在执行`suspend()`之后,`t2`线程开始执行并修改了共享变量`shareVar`,然后`t1`被`resume()`唤醒,`t1`可能会陷入一个无限循环,因为它在`suspend()`时检查的条件(`shareVar==5`...

    java线程学习专题资料

    这个Java线程专题学习资料可能包含了上述知识点的详细讲解,尤其是从JavaEye社区收集的经典教程,将帮助开发者深入理解Java线程的使用和优化,提升并发编程能力。通过学习和实践,你可以掌握如何在多线程环境中编写...

    Java多线程同步具体实例.doc

    首先,我们看到一个未同步的`run()`方法,当`b`为`false`时,这个线程会无限循环地调用`sell()`方法。此时,如果多个线程同时执行,可能会导致卖出的票数超过实际的票数,因为没有进行同步控制。 然后,我们看到一...

    贪吃蛇源程序,java多线程

    这个线程通常在一个无限循环中运行,以确保游戏的连续性。每当循环迭代时,它会检查游戏的当前状态,并做出相应的更新。 2. 用户输入处理线程:这个线程用于接收用户的键盘输入,比如方向键的按下,然后将这些输入...

    java线程例子大全

    - 活锁:线程不断尝试获取资源但始终失败,导致线程无限循环。 10. **线程安全** - 临界区:只允许一个线程访问的代码段。 - 同步容器类:如`Vector`, `HashTable`等,提供了线程安全的容器操作。 - 并发容器类...

    java多线程tcp查询

    线程内部可能包含一个无限循环,不断读取客户端发送的数据,并根据数据内容做出响应。例如,可能会解析客户端的查询请求,查询数据库并返回结果。在处理完一次请求后,线程并不会立即终止,而是等待新的数据到来,以...

    Java线程.pdf

    - **避免无限循环:** 无限循环会导致线程无法正常退出,应使用条件退出循环。 - **使用并发集合:** `java.util.concurrent`包提供了专门用于多线程环境的集合类。 #### 七、总结 通过本教程的学习,你已经掌握了...

    java多线程学习资料

    - `go()`方法: 包含了一个无限循环,用于更新计数器的值并显示在文本框中。 - `sleep(100)`: 让线程暂停一段时间,避免过度消耗CPU资源。 - `runFlag`: 一个布尔变量,用于控制计数器是否继续递增。 - **用户...

    java Socket 多线程

    在服务端,通常首先创建一个ServerSocket实例,然后在一个无限循环中调用`accept()`方法监听客户端的连接。每当接收到一个连接,就在新的线程中处理这个连接: ```java ServerSocket serverSocket = new ...

    Java源码查看线程的运行状态.rar

    在Java编程中,线程是程序执行的基本单元,它允许应用程序同时执行多个任务。了解如何查看线程的运行状态对于调试和性能优化...通过阅读和分析源码,我们可以更深入地了解Java线程的工作原理,从而提升我们的编程技能。

    java线程编程资料

    - **活锁**:线程反复尝试获取资源但总是失败,导致无限循环。 通过理解并掌握以上知识点,开发者能够编写出高效、稳定的多线程Java程序,解决并发问题,提高程序性能。在实际项目中,合理地使用线程和同步机制是...

    java 多线程小例子 很方便 很实用 适合初学者

    同时,`main`线程也处于无限循环中,持续打印其线程名称和状态。 在`TestThread`类中,我们继承了`Thread`类并重写了`run()`方法。这个方法将在新线程启动后执行,同样处于一个无限循环中,持续输出该线程的名称和...

    Java线程及多线程技术及应用.pdf

    在文档中,无论是MyThread还是MyRunable类的run()方法中,都存在一个无限循环,这可能造成线程永远无法结束。为了控制线程在特定条件下能够优雅地结束,可以使用共享变量配合volatile关键字进行控制,或者使用中断...

    java 多线程 socket聊天程序

    在本聊天程序中,服务器端开启一个`ServerSocket`,然后在一个无限循环中调用`accept()`方法,等待新的客户端连接。当有新的客户端连接时,服务器会为每个客户端创建一个新的线程来处理通信,确保不会因为处理一个...

    Java线程Java线程Java线程Java线程

    Java线程是Java编程中的重要概念,它允许程序并发执行多个任务,提高系统资源的利用率,为多核处理器环境提供良好的支持。...了解并熟练掌握这些Java线程知识,能够帮助开发者编写出高效、稳定、安全的多线程程序。

Global site tag (gtag.js) - Google Analytics