当前位置 : 主页 > 编程语言 > java >

Java用户线程和守护线程区别

来源:互联网 收集:自由互联 发布时间:2022-07-13
用户线程(前台线程): 应用程序必须运行完所有的用户线程才可以退出。 守护线程(后台线程): 应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的守护线程在应用程序退出时


用户线程(前台线程): 应用程序必须运行完所有的用户线程才可以退出。
守护线程(后台线程): 应用程序则可以不考虑其是否已经运行完毕而直接退出,所有的守护线程在应用程序退出时都会自动结束。

用户线程

守护线程

优先级



与否不影响JVM的退出



是否任何时候中断



是否自动关闭



设置方式

​​setDaemon(false)​​

​​setDaemon(true)​​

典型场景

数据库连结、操作文件

GC垃圾回收、JIT线程等为用户线程服务的线程

package com.test.thread;


/**
* 描述: 守护线程
*/
public class C2DamonThread implements Runnable {

/**
* 描述: 后台线程
*/
@Override
public void run() {

/* 模拟业务逻辑 */
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "-------- is running... " + i);
}

}

/**
* 描述: 主线程
*/
public static void main(String[] args) throws InterruptedException {

/* 启动一个后台线程 */
C2DamonThread dt = new C2DamonThread();
Thread thread = new Thread(dt, "守护线程");
// 将线程thread设置成守护线程 该设置必须要在该线程启动之前
// 守护线程是为用户线程服务的。
// 虚拟机会等待用户线程结束后才结束。
// 虚拟机不会等待守护线程结束,所以守护线程会随时结束。
thread.setDaemon(true);
thread.start();

/* 模拟主线程业务逻辑 */
for (int i = 0; i < 10; i++) {
Thread.sleep(100);
System.err.println("用户主线程:" + i);
}
}

}

运行结果:

Java用户线程和守护线程区别_用户线程


上一篇:Java线程状态
下一篇:没有了
网友评论