java守护线程和用户线程
java守护线程和用户线程
1.Java线程分类
Java分两类线程:1.用户线程 2.守护线程
2.区别
1.JVM在用户线程没有结束前,会一直和守护线程一同运行。
2.如果用户线程全部结束,那么JVM会退出,守护线程也会随之结束。
3.JVM退不退出完全是看用户线程,如果全部用户线程退出了,不管JVM内是否还剩余守护线程也会退出,不会考虑守护线程是否结束。
4.守护线程是为用户线程服务的。
5.守护线程一般伴随这JVM的结束而结束。(当然也可以人工结束)
6.守护线程的作用是为其他线程的运行提供便利服务。
7.守护线程创建的线程也是守护线程,用户线程可以创建用户线程也可以创建守护线程。
8.守护线程需要通过setDaemon(true)方法来设计。
3.setDaemon(true)方法
我们可以通过setDaemon(true)方法来把一个线程设置为守护线程,下面通过例子来理解:
public class TestDaemon {
public static void main(String[] args) {
//创建线程
Thread t1 = new Thread(new UserThrea(),"user");
Thread t2 = new Thread(new DaemonThread(),"daemon");
t2.setDaemon(true); //设置守护线程,必须在start()方法前
//启动
t1.start();
t2.start();
}
}
//用户线程
class UserThrea implements Runnable{
@Override
public void run() {
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(10);
System.out.println("用户线程->"+i+"运行");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//守护线程
class DaemonThread implements Runnable{
@Override
public void run() {
//死循环,测试守护线程结束时期
while (true) {
try {
System.out.println("守护线程运行");
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
运行结果:
守护线程运行
用户线程->0运行
守护线程运行
用户线程->1运行
守护线程运行
用户线程->2运行
守护线程运行
用户线程->3运行
守护线程运行
用户线程->4运行
守护线程运行
用户线程->5运行
守护线程运行
用户线程->6运行
守护线程运行
用户线程->7运行
守护线程运行
用户线程->8运行
守护线程运行
用户线程->9运行
守护线程运行
4.结果分析
从代码上可以看出用户线程是运行10次后结果,而守护线程里是一个死循环,可以看出最后守护线程还是结束了,这说明了JVM在用户线程全部结束后,在关闭前会把所有守护线程也随之关闭,所有JVM的退出是取决于用户线程的生命周期。
更多的守护线程的信息请参考博客https://blog.csdn.net/shimiso/article/details/8964414.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)