- public class DaemonTheadDemo {
- public static void main(String[] args){
- Thread thread = new Thread(new Runnable() {
- @Override
- public void run() {
- for (; ;) { }
- }
- });
- thread.start();
- System.out.println("main thread is over");
- // 当父线程结束后, 子线程还继续存在, 子线程的生命周期不受父线程的影响
- // 说明子线程还存在的情况下 jvm 进程并不会终止
- }
- }
- /**
- * 守护线程
- */
- public class DaemonTheadDemo2 {
- public static void main(String[] args){
- Thread thread = new Thread(new Runnable() {
- @Override
- public void run() {
- for (; ;) { }
- }
- });
- thread.setDaemon(true);
- thread.start();
- System.out.println("main thread is over");
- // 此时 main 函数是唯一的用户线程, thread 线程是守护线程, 当 main 线程运行结束后,
- // 就会终止 jvm 进程, jvm 不会等守护线程运行完毕就会结束 jvm 进程
- //main 线程运行结束后, jvm 会自动启动一个叫作 DestroyJavaVM 的线程, 该线程会等待所有用户线程结束后终止 jvm 进程
- }
- }
来源: http://www.bubuko.com/infodetail-3158773.html