专业的JAVA编程教程与资源

网站首页 > java教程 正文

java的守护线程的作用

temp10 2025-05-30 17:24:08 java教程 9 ℃ 0 评论

守护线程其实就是非守护线程的保姆,只有非守护线程存在时,守护线程才能存在,一旦非守护线程结束,则守护线程无条件地退出。

下面通过一个例子来说明守护线程的运行机制

java的守护线程的作用


/**
 * 守护线程测试
 * @author ssj
 *
 */
public class SouhuTest {
	public static void main(String[] arg0) {
		System.out.println("===============main start=============");
		Thread watchThread= new Thread("守护线程...") {
			@Override
			public void run() {
				int j = 0;
				while (j<1000) {
					j++;
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println(Thread.currentThread().getName() + ":" + j);
				}
				super.run();
			}
		};
		Thread userThread = new Thread("非守护线程") {
			@Override
			public void run() {
				int j = 0;
				while (j <= 3) {
					j++;
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println(Thread.currentThread().getName() + ":" + j);
				}
				super.run();
			}
		};
		// setDaemon, 不设置则默认false
		watchThread.setDaemon(true);// 设置watchThread为守护线程
		userThread.setDaemon(false);// 设置userThread为非守护线程
		watchThread.start();
		userThread.start();
		System.out.println("===========main end===============");
	}
}

运行结果



如果我注释非守护线程的运行代码://userThread.start();

运行结果会如何呢?

答案是守护线程不打印



通过上面的测试,我们得出结论:

守护线程是jvm中一切非守护线程的保姆,它的存亡无关紧要

那么守护线程的作用是什么呢?

1 jvm的垃圾回收器使用的就是守护线程,当某个线程运行产生的垃圾过多时,守护线程会实时监视并回收垃圾;当线程结束时,垃圾其实也相应地释放了,也就用不上守护线程了,守护线程也就退出了

2 守护线程用来服务于指定的线程,如数据连接池的关闭等,做一个辅助和保障功能;

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表