从头认识java-18.2 基本的线程机制(5)-守护线程与非守护线程

本文探讨了Java中守护线程与非守护线程的概念及其区别,包括它们的作用、生命周期及如何在程序中设置与切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这一章节我们来讨论一下守护线程与非守护线程。

1.什么是守护线程?什么是非守护线程?

非守护线程:Java虚拟机在它所有非守护线程已经离开后自动离开。

守护线程:守护线程则是用来服务用户线程的,如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去。


2.相同点

大家都是线程,其实可以互相切换


3.不同点:退出的时间点

退出的先后顺序:

非守护线程->守护线程->jvm

4.注意点:

(1)设置守护线程需要在start之前,否在抛异常

package com.ray.ch17;

public class Test {

	public static void main(String[] args) {
		WritePaper writePaper = new WritePaper();
		Thread thread = new Thread(writePaper);
		thread.start();
		thread.setDaemon(true);
	}
}

class WritePaper implements Runnable {
	@Override
	public void run() {
		System.out.println("run");
	}
}

输出:

run
Exception in thread "main" java.lang.IllegalThreadStateException
at java.lang.Thread.setDaemon(Thread.java:1275)
at com.ray.ch17.Test.main(Test.java:9)


(2)由于上面第三点所说的退出时间节点问题,因此会出现下面的情况

package com.ray.ch17;

public class Test {

	public static void main(String[] args) {
		WritePaper writePaper = new WritePaper();
		Thread thread = new Thread(writePaper);
		thread.setDaemon(true);
		thread.start();
	}
}

class WritePaper implements Runnable {
	@Override
	public void run() {
		System.out.println("run");
	}
}


输出:

(无)


其实这里根本就没有执行相应的语句,因为守护线程知道现在没有需要服务的非守护线程(用户自定义线程),就直接退出了。


如果想执行程序里面的输出,则不要设置守护:

package com.ray.ch17;

public class Test {

	public static void main(String[] args) {
		WritePaper writePaper = new WritePaper();
		Thread thread = new Thread(writePaper);
		thread.start();
	}
}

class WritePaper implements Runnable {
	@Override
	public void run() {
		System.out.println("run");
	}
}

输出:

run


(3)守护线程与非守护线程其实是没有本质区别,可以相互切换

package com.ray.ch17;

public class Test {

	public static void main(String[] args) {
		WritePaper writePaper = new WritePaper();
		Thread thread = new Thread(writePaper);
		thread.setDaemon(true);
		thread.setDaemon(false);
		thread.start();
	}
}

class WritePaper implements Runnable {
	@Override
	public void run() {
		System.out.println("run");
	}
}

输出:

run


总结:这一章节主要介绍了守护线程与非守护线程的区别与联系。


这一章节就到这里,谢谢。

-----------------------------------

目录




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值