一、用户线程
默认创建的线程就是非daemon的,我们称之为用户线程,用户线程如果一直在运行,jvm进程是不会退出的;
public class Test {
public static void main(String[] args) {
System.out.println("main主线程干的事......");
new Thread() {
@Override
public void run() {
System.out.println("另外一个线程干的事......");
}
}.start();
}
}
二、守护线程
守护线程:守护线程则是用来服务用户线程的,如果没有其他用户线程在运行,那么就没有可服务对象,也就没有理由继续下去;比如main线程之类的都执行完了,那么守护线程就会跟着jvm进程一起退出,不会像工作线程一样阻止jvm进程退出,我们一般将后台运行的线程设置为守护线程,如:一些监控线程,失败处理线程等;
setDaemon(boolean on)方法可以方便的设置线程的Daemon模式,true为Daemon模式,false为User模式。setDaemon(boolean on)方法必须在线程启动之前调用,当线程正在运行时调用会产生异常。isDaemon方法将测试该线程是否为守护线程。值得一提的是,当你在一个守护线程中产生了其他线程,那么这些新产生的线程不用设置Daemon属性,都将是守护线程,用户线程同样。
public class Test {
public static void main(String[] args) {
System.out.println("main主线程干的事......");
Thread thread = new Thread() {
@Override
public void run() {
System.out.println("另外一个线程干的事......");
}
};
/** 设置daemon模式开启,该线程为守护线程 */
thread.setDaemon(true);
thread.start();
}
}