25

可能重复:
java
中的守护线程是什么守护线程什么时候有用?

我对 Java 中用户线程和守护线程之间的区别感到困惑。

你能告诉我吗:

  1. Java中的用户线程和守护线程有什么区别?
  2. 在什么情况下会使用守护线程?你能给我一些例子吗?
4

3 回答 3

24

一旦最后一个非 jvm 线程终止,JVM 将退出。这意味着如果您创建的任何线程仍在运行,jvm 将不会关闭。守护线程是不会阻止 JVM 关闭的线程。通常,您会将它们用于一些后台任务,如果用户要求将其关闭,您不希望让应用程序保持正常运行。

另外,您的问题已经在这里被问过(并得到了回答)—— Java 中的守护线程是什么?

守护线程的一些常见(根据个人经验)用例可能包括

  • 轮询远程系统以获取状态更改的后台线程
  • 后台工作线程(例如发送电子邮件通知、snmp 等)
  • 用于执行计划维护的自定义计时器线程
于 2013-01-11T06:28:50.130 回答
5

第二个问题:

当所有正常线程都已终止时,守护程序线程会自动终止。

您可以使用守护线程在您的应用程序中进行一些内务管理或清理。守护线程用于后台支持任务,仅在正常线程执行时才需要。GC线程是一个守护线程。

于 2013-01-11T06:45:50.683 回答
2

用户线程是由应用程序(用户)创建的线程,并且在大多数情况下,Java VM 会创建一个守护线程来为用户线程提供服务。当用户线程退出时,VM 会区分线程是用户还是守护程序。如果用户线程退出,VM 将检查是否有任何其他用户线程正在运行。如果有,它将安排下一个线程(用户或守护程序)。如果没有其他用户线程在运行,而只有守护线程,则该 VM 实例也将退出。

这两种线程的区别很简单:如果 Java 运行时确定应用程序中运行的唯一线程是守护线程(即不存在用户线程),Java 运行时会立即关闭应用程序,有效地停止所有守护线程死在他们的轨道上。为了让应用程序继续运行,它必须始终具有至少一个活动用户线程。在所有其他方面,Java 运行时以完全相同的方式处理守护线程和用户线程。

于 2013-01-11T06:46:51.117 回答