Java分为两种线程:
1.User Thread(用户线程)
2.Daemon Thread(守护线程)
当在java中创建线程时 默认状态它是用户线程 如果该线程正在运行 JVM不会结束程序
守护线程:为系统中的用户线程提供服务 没有用户线程存在 JVM不会等待守护线程结束
JVM会结束程序和相关联的守护线程
package com.tony;
public class DaemonThread implements Runnable {
@Override
public void run() {
while(true) {
handleSomething();
}
}
private void handleSomething() {
try {
System.out.println("DaemonThread is running");
Thread.sleep(1*1000);
}catch(InterruptedException e) {
e.printStackTrace();
}
}
}
package com.tony;
public class DaemonThreadTest {
public static void main(String[] args) throws InterruptedException {
Thread daemonThread = new Thread(new DaemonThread());
/**
* 将用户线程设置为守护线程 必须在start()之前设置 否则抛出IllegalThreadStateException异常
* 不能把正在运行的用户线程设置为守护线程
*
* 在守护线程中创建的新线程也是守护线程
*/
daemonThread.setDaemon(true);
daemonThread.start();
Thread.sleep(5 *1000);
System.out.println("程序结束"); // 程序运行结束 JVM就会终结守护线程
}
}
结果输出:
DaemonThread is running
DaemonThread is running
DaemonThread is running
DaemonThread is running
DaemonThread is running
程序结束