Java的Daemon线程的测试

来源:互联网 发布:雅思精听 知乎 编辑:程序博客网 时间:2024/06/12 08:17

  进行测试当线程只剩下守护线程的时候,JVM就会退出,但是如果还有其他任意一个用户线程还在,JVM就不会退出。

public class DaemonRunner implements Runnable {    public void run() {        while (true) {            for (int i = 1; i <= 100; i++) {                System.out.println(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);        // 接受输入,使程序在此停顿,一旦接受到用户输入,main线程结束,JVM退出!        scanner.next();          //AddShutdownHook方法增加JVM停止时要做处理事件:        //当JVM退出时,打印JVM Exit语句.        Runtime.getRuntime().addShutdownHook(new Thread(){              @Override            public void run() {                // TODO Auto-generated method stub            System.out.println("JVM Exit!");            }          });    }}

当程序运行的时候,Daemon线程会不断的在控制台打印数字,而main线程是一个用户线程由于”scanner.next()”

等待用户输入,属于阻塞了.此时JVM不会退出.


原文章来自于http://www.cnblogs.com/ChrisWang/archive/2009/11/28/1612815.html




原创粉丝点击