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 进程
        }
    }
    
    
  • 相关阅读:
    css 选择器
    IIS6、7添加反向代理的步骤
    使用脚本监控windows服务的方法
    ueditor编辑器插件 chrome中图片上传框延时问题
    Mysql隐式类型转换原则
    ASP.NET MVC 分页问题
    .NET程序集引用COM组件MSScriptControl所遇到的问题
    Makefile学习笔记
    操作系统的主要功能
    Linux基本命令之用户系统相关命令
  • 原文地址:https://www.cnblogs.com/fly-book/p/11367433.html
Copyright © 2011-2022 走看看