介绍
在java中有两种线程:用户线程,守护线程。
用户线程 指用户创建的线程,主线程停止用户线程不会停止
守护线程 当进程结束或主线程停止,守护线程也会停止
特点
- 不具备生命周期,它随着虚拟机的结束而结束
- 如果想把线程转换守护线程,必须在strat之前调用 setDaemon(boolean)方法一但线程变为守护线程就不能变为用户线程了
守护线程和main相关(主线程),gc线程(垃圾回收器)也是守护线程,当主线程死掉后,gc线程也会死。
例子
用户线程和主线程例子:
public class ThreadDaemoa {
public static void main(String[] args) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0;i<30;i++){
System.out.println("用户线程:"+i);
}
}
});
thread.start();
for (int i = 0;i<5;i++) {
System.out.println("主线程:"+i);
}
System.out.println("主线程执行完毕!");
}
}
当主线程执行完毕后,用户线程依然在执行
主线程和守护线程例子:
public class ThreadDaemoa {
public static void main(String[] args) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0;i<30;i++){
System.out.println("用户线程:"+i);
}
}
});
thread.setDaemon(true);//在start之前设置成守护线程
thread.start();
for (int i = 0;i<5;i++) {
System.out.println("主线程:"+i);
}
System.out.println("主线程执行完毕!");
}
}
可以看到主线程执行完后,守护线程就不会执行完了,虽然执行到了16