zoukankan      html  css  js  c++  java
  • 守护线程

    Java中的线程可以分为两类,即非守护线程和守护线程。

    关于守护线程要注意的是:

    (1)当jvm中只剩下守护线程时,JVM会退出,所以不要在守护 线程中做比较重要的操作,比如文件读写等

    (2)在Daemon线程中产生的新线程也是Daemon的

    (3) 守护线程结束只与JVM中是否还有非守护线程右关,而与创建守护线程的父线程是否结束有关

     

    Java垃圾回收线程就是一个典型的守护线程,当JVM中没有非守护线程时JVM回退出

    public class Test {
    
        static class DaemonRunner implements Runnable {
            @Override
            public void run() {
                while (true) {
                    for (int i = 1; i <= 100; i++) {
                        System.out.println("daemon thread:" + i);
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
    
        public static void main(String[] args) {
    
            Thread daemonThread = new Thread(new DaemonRunner());
            daemonThread.setDaemon(true);
            daemonThread.start();
            System.out.println("isDaemon? = " + daemonThread.isDaemon());
            
            Scanner scanner = new Scanner(System.in);
            scanner.next();
            
        }
    }

     关于第(3)的例子

    public class Demo {
    
        public static void main(String[] args) {
            new Thread(()->{
                Thread th =  new Thread(
                        ()->{
                            for(int i = 1 ; i<= 100;i++) {
                                System.out.println("index = " + i);
                                try {
                                    Thread.sleep(1_000);
                                } catch (InterruptedException e) {
                                }
                            }
                        }
                );
                th.setDaemon(true);
                th.start();
                
                try {
                    Thread.sleep(2_000);
                    System.out.println("out thread is over ");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }).start();
            
            new Thread(()-> {
                try {
                    Thread.sleep(5_000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }).start();
        }
    }
  • 相关阅读:
    使用js来执行全屏
    vue多个组件的过渡
    mac笔记本上的工具
    webpack优化技术参考
    VS Code 编译器的调试工具整理
    自定义滑块Vue组件
    Multi-level Multi-select plugin
    cucumber learning : http://www.cnblogs.com/puresoul/category/340832.html
    Opensuse enable sound and mic card
    Shell displays color output
  • 原文地址:https://www.cnblogs.com/moris5013/p/10703508.html
Copyright © 2011-2022 走看看