我完全了解将线程标记为守护线程对JVM退出的影响(如果所有非守护线程都退出,则JVM也将退出)。
将线程设置为守护进程是否有其他副作用?
(作为一个完整的旁白,除了语义之外,这实际上是无关紧要的,在这种情况下,守护程序线程的含义不是倒退的:守护程序线程不应该保留JVM实例吗?如果我编写了自己的alive...for守护程序并启动它运行,我难道不想让JVM保持活动状态,只要该线程是活动的吗?或者“守护进程”这个词还有其他的语义吗?)
发布于 2009-05-18 21:36:08
正如您所拥有的,这意味着线程是分离的,并且只要JVM运行就会运行,除非您显式停止它。根据规范,只要有任何非守护进程线程在运行,JVM就会一直运行。
除此之外,这并不意味着什么。
您可能会说这是倒退的-毕竟,shutdown(8)会杀死守护进程-但JVM应该表现得像一个行为良好的进程,否则,这意味着人们应该能够预期它会终止而不会被终止。因此,此规范是基于更常见用例的设计决策。
发布于 2009-05-18 21:37:33
守护线程是对其他线程的服务。它只是jvm本身的守护进程,而不是外部世界的守护进程。因此,即使守护进程存在,它们也没有更多的用处。如果你想要一个http守护进程,你只需要编写一个普通线程的httpserver,然后使用你的操作系统的工具集把它作为守护进程来运行应用程序。
在jvm中包含守护线程并不是操作系统的守护线程。守护进程通常是无限循环,您不希望jvm无限运行,而您所运行的只是几个等待输入的守护进程(没有给定)。
https://stackoverflow.com/questions/879939
复制相似问题