zoukankan      html  css  js  c++  java
  • JAVA DAEMON线程的理解

    java线程分两种:用户线程和daemon线程。daemon线程或进程就是守护线程或者进程,但是java中所说的daemon线程和linux中的daemon是有一点区别的。

    linux中的daemon进程实际是指运行在后台提供某种服务的进程,例如cron服务的crond、提供http服务的httpd;而java中的daemon线程是指jvm实例中只剩下daemon的时候,jvm就会退出。

    我们通过以下实验来看下daemon线程和普通用户线程的区别

    1. 创建一个运行死循环的daemon线程,主线程运行5s后退出,daemon线程也会退出。
    public static void main(String[] args) throws InterruptedException {
    
            Thread thread = new Thread(new MyThread());
            thread.setDaemon(true); // 设置线程为daemon线程
            thread.start();
    
            Thread.sleep(5000); // 5s后主线程退出
        }
    
    
        static class MyThread implements Runnable {
    
            @Override
            public void run() {
                while (true) { // 线程死循环
                    try {
                        // 100ms 打印一次hello
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("hello");
                }
            }
        }
    

    运行结果:5ms daemon线程退出。

    hello
    hello
    hello
    hello
    hello
    hello
    hello
    hello
    hello
    hello
    hello
    
    Process finished with exit code 0
    
    1. 注释掉daemon,使得线程成为一个普通的用户线程
    public static void main(String[] args) throws InterruptedException {
    
            Thread thread = new Thread(new MyThread());
            // thread.setDaemon(true); // 普通的用户线程
            thread.start();
    
            Thread.sleep(5000); // 5s后主线程退出
        }
    
    
        static class MyThread implements Runnable {
    
            @Override
            public void run() {
                while (true) { // 线程死循环
                    try {
                        // 100ms 打印一次hello
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("hello");
                }
            }
        }
    

    运行结果:线程在主线程运行完后不会退出,一直死循环

  • 相关阅读:
    一步一步学Remoting之四:承载方式(2)<转>
    一步一步学Remoting之五:异步操作<转>
    NET3.0+中使软件发出声音[整理篇]<转>
    Ext Core手册
    一步一步学Remoting之一:从简单开始<转>
    asp.net 常用字符串过滤方法 <转>
    mssql性能优化<转>
    一步一步学Remoting之四:承载方式(1)<转>
    Javascript中最常用的61个经典技巧 <转>
    Js事件对象<转>
  • 原文地址:https://www.cnblogs.com/set-cookie/p/8728224.html
Copyright © 2011-2022 走看看