成为守护程序线程意味着什么?

时间:2009-05-18 21:27:42

标签: java

我完全了解将一个线程标记为JVM出口上的守护程序线程的影响(如果所有非守护程序线程都退出,JVM将退出。)

将线程设置为守护进程是否还有其他副作用?

(作为一个完整的旁边,除了语义之外真的无关紧要,在这种情况下守护程序线程的意思不是倒退的:不应该守护程序线程让JVM保持活动状态......例如,如果我写了我的话拥有自己的HTTP守护进程并开始运行,只要该线程处于活动状态,我不希望JVM保持活动状态吗?或者术语'守护进程'还有其他语义吗?)

2 个答案:

答案 0 :(得分:4)

正如您所知,这意味着线程已分离并且只要JVM运行就会运行,除非您明确地停止它。根据规范,只要任何 -daemon线程正在运行,JVM就会一直运行。

除此之外,它并不意味着什么。

你可能会认为这是倒退 - 毕竟, shutdown(8)会杀死守护程序进程 - 但是JVM应该像一个表现良好的进程,这意味着人们应该能够期待它终止而不必被杀死。因此,此规范是基于更常见用例的设计决策。

答案 1 :(得分:3)

守护程序线程是对其他线程的服务。 它只是jvm本身的守护进程而不是外部世界。因此,如果只有守护进程激动,他们就没有更多的用处。 如果你想要一个http守护进程,你只需用正常的线程编写一个httpserver,并使用你的工具集将它作为一个守护进程调用,以便将应用程序作为一个守护进程运行。

在jvm中包含一个守护程序线程不是os的守护程序线程。守护进程通常是无限循环,你不希望你的jvm无限地继续运行,而你所有运行的是一些等待输入的守护进程(没有给出)。