Java 为了不阻止VM退出,线程应该做什么?

Java 为了不阻止VM退出,线程应该做什么?,java,multithreading,virtual-machine,daemon,Java,Multithreading,Virtual Machine,Daemon,最近,我阅读了“Java网络编程”,在第5.5节第5.5.2.6部分,它有以下代码: public TimeSlicer(long milliseconds, int priority) { this.timeslice = milliseconds; this.setPriority(priority); // If this is the last thread left, it should not // stop the VM from exitin

最近,我阅读了“Java网络编程”,在第5.5节第5.5.2.6部分,它有以下代码:

public TimeSlicer(long milliseconds, int priority) {

    this.timeslice = milliseconds;

    this.setPriority(priority);

    // If this is the last thread left, it should not
    // stop the VM from exiting

    this.setDaemon(true);

}

只是不太理解注释,守护进程线程与VM退出的关系是什么?请提前感谢。

当没有非守护进程线程运行时,Java VM退出。通过使用
setDaemon(true)
将线程标记为守护进程线程,您告诉VM即使该线程仍在运行,也可以退出

从:

将此线程标记为守护进程线程或用户线程。当运行的线程都是守护进程线程时,Java虚拟机将退出

如果
main()
所做的只是创建一个具有无限循环的线程(例如while(true){try{sleep(1000);}catch(异常e){}`

  • 如果线程不是守护进程,那么您的程序将永远运行
  • 如果线程是守护进程,程序将退出,终止守护进程线程

具体来说,将线程设置为守护进程不会使进程成为后台运行的守护进程。为此,请参阅

谢谢,但是如果VM退出,守护进程线程如何工作?我认为VM是所有线程都在其中工作的环境。因此VM退出意味着damon线程不受其管理,对吗当虚拟机退出时,所有线程停止。守护进程线程只在虚拟机运行时运行。很明显,虚拟机是一个巨大的错误。哦,谢谢你,我认为在虚拟机上有很多东西需要学习。