zoukankan      html  css  js  c++  java
  • 09.守护线程与用户线程区别

    
    public class DaemonTheadDemo {
        public static void main(String[] args){
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    for (; ;) { }
                }
            });
            thread.start();
            //thread.setDaemon(true);  //设置守护线程必须在线程start()之前,得到一个类似以下异常
                                        // 但程序依然可以正常执行,只是被当做用户线程而已
    
            //Exception in thread "main" java.lang.IllegalThreadStateException
            //	at java.lang.Thread.setDaemon(Thread.java:1359)
            //	at com.combat.DaemonTheadDemo.main(DaemonTheadDemo.java:12)
            System.out.println("main thread is over");
            //当父线程结束后,子线程还继续存在,子线程的生命周期不受父线程的影响
            //说明子线程还存在的情况下jvm进程并不会终止
            //如果不把thread设置为守护线程,thread线程会不停执行
        }
    }
    
    
    /**
     * 守护线程
     */
    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 进程
        }
    }
    
    
  • 相关阅读:
    基于Dubbo的压测调优实例
    Rsync同步工具安装文档
    Codeforces 114A-Cifera(暴力)
    UVa 872
    Highcharts可拖动式图表
    Android中配置JDK和SDK的环境变量
    用CSS border相关属性画三角形
    屌丝程序猿赚钱之道 之APP
    软件开发工具(一)——概论
    建造者模式(屌丝专用)
  • 原文地址:https://www.cnblogs.com/fly-book/p/11367433.html
Copyright © 2011-2022 走看看