2

典型的 Java 应用程序何时完成?

如果我在该方法中启动一个新线程,main然后该main方法完成,但另一个线程继续工作,应用程序仍将继续运行,直到它的所有线程都死了,不是吗?

谢谢&圣诞快乐!

4

2 回答 2

6

是的,除非它是一个守护线程。从Thread API引用:

当 Java 虚拟机启动时,通常有一个非守护线程(通常调用某个指定类的名为 main 的方法)。Java 虚拟机继续执行线程,直到发生以下任一情况:

  • 已调用 Runtime 类的退出方法,并且安全管理器已允许进行退出操作。
  • 所有不是守护线程的线程都已经死亡,要么通过调用 run 方法返回,要么抛出传播到 run 方法之外的异常。
于 2010-12-27T16:35:58.723 回答
1

main() 函数定义了您的主用户线程。您可能还创建了其他用户线程。您可能还在其中一些线程上调用了 setDeamon()。

JVM 将在以下情况下结束:

  1. 主程序结束,没有其他非守护线程
  2. 您在主线程中有一个未捕获的异常,并且没有其他非守护线程
  3. System.exit() 或 Runtime.halt() 被调用
  4. 内部 JVM 错误(罕见)
  5. 杀死来自操作系统的 -9 信号
  6. 电源故障或类似的不可恢复的硬件故障
于 2010-12-27T16:54:00.353 回答