Java 守护线程

概要:

Java虚拟机(JVM)的垃圾回收线程可以称为守护线程。守护线程是一种特殊的线程,它是否运行结束并不仅仅依赖于自己run()方法内的程序,还依赖于其他非守护线程。本实例介绍如何实现守护线程,并判断其何时停止。

| |目录

技术要点

    运用守护线程的技术要点如下:

  • 普通线程可以通过Thread类的setDaemon(布尔类型参数)方法设置为守护线程,参数为true时表示该线程为守护线程。任何线程都可以通过Thread类的isDaemon()方法判断是否为守护线程。

  • 线程被运行后,Thread类的setDaemon(布尔类型参数)方法无效,即必须在调用方法start()之前调用setDaemon(布尔类型参数)方法,才能设置该线程为守护线程。

  • 如果所有的非守护线程运行结束,无论守护线程有没有运行结束,都将不再运行。如果一个程序没有任何守护线程,则所有非守护线程运行结束后就退出。程序中启动的线程默认为非守护线程,但在守护线程中启动的线程都是守护线程。

代码实现

package net.xsoftlab.baike;
class FatherThread extends Thread {
	public void run() {
		System.out.println("遇到危险时,父亲是否被保护 ? " + this.isDaemon());
		System.out.println("在危险时,父亲要保护儿子");
		Thread child = new ChildThread();
		child.setDaemon(true); // 设置子类为守护线程
		child.start();// 启动线程
		try {
			Thread.sleep(1000);// 休眠1秒
		} catch (InterruptedException e) {// 捕获唤醒异常
			System.out.println("唤醒异常:" + e.getMessage());
		} finally {// 内容总执行
			System.out.println("在危险时,父亲没有被保护,但要保护儿子");
		}
		System.out.println("父亲爱儿子...");
	}
}
class ChildThread extends Thread {
	public void run() {
		System.out.println("儿子是否被保护?" + this.isDaemon());
		System.out.println("一共有几个儿子");
		int i = 0;
		try {
			while (i < 5) {// 进行5次循环
				System.out.println("儿子" + i++);
				Thread.sleep(200);// 休眠0.2秒
			}
		} catch (InterruptedException e) {// 捕获唤醒异常
			System.out.println("唤醒异常:" + e.getMessage());
		} finally {// 内容总执行
			System.out.println("父亲己经把儿子保护好了...");
		}
		System.out.println("危险结束");
	}
}
public class TextThreadDaemon {// 操作守护线程的类
	public static void main(String[] args) {// java程序主入口处
		Thread father = new FatherThread();// 默认情况下父类是普通线程
		father.start();// 启动父类线程
		try {
			Thread.sleep(500);
		} catch (InterruptedException e) {// 捕获唤醒异常
			System.out.println("唤醒异常:" + e.getMessage());
		}
	}
}

程序解读

  1. FatherThread类继承Thread类必须实现Thread类的run()方法。在run()方法中获得ChildThread子类对象,将子类对象设置为守护线程并启动子类线程。线程休眠1秒。

  2. ChildThread类继承Thread类必须实现Thread类的run()方法。run()方法判断该类线程是否是守护线程,并根据条件循环5次让线程休眠。

  3. 在main()主方法中创建FatherThread父类对象,默认情况下其为普通线程类,当调用start()方法启动线程时使子类变为守护线程类。


评论关闭
评论 还能输入200
评论关闭
评论 还能输入200
资料加载中...
已关注 , 取消