Java应用程序生命周期

Java应用程序生命周期,java,multithreading,lifecycle,main-method,Java,Multithreading,Lifecycle,Main Method,典型的Java应用程序何时完成 如果我在main方法中启动一个新线程,然后main方法完成,但另一个线程继续工作,应用程序将一直运行,直到所有线程都死掉,不是吗 谢谢,圣诞快乐 是的,除非它是一条执事线索。引述自: 当Java虚拟机启动时,通常只有一个非守护进程线程(它通常调用某个指定类中名为main的方法)。Java虚拟机将继续执行线程,直到发生以下任一情况: 类运行时的exit方法已被调用,并且安全管理器已允许执行exit操作 所有不是守护进程线程的线程都已死亡,要么是通过调用run方法返

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

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


谢谢,圣诞快乐

是的,除非它是一条执事线索。引述自:

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

  • 类运行时的exit方法已被调用,并且安全管理器已允许执行exit操作
  • 所有不是守护进程线程的线程都已死亡,要么是通过调用run方法返回,要么是通过抛出传播到run方法之外的异常
函数的作用是:定义主用户线程。您可能还创建了其他用户线程。您可能还对其中一些线程调用了setDeamon()

JVM将在以下情况下结束:

  • 主例程结束,没有其他非deamon线程
  • 主线程中有一个未捕获的异常,并且没有其他非deamon线程
  • 调用System.exit()或Runtime.halt()
  • 内部JVM错误(罕见)
  • 来自操作系统的Kill-9信号
  • 电源故障或类似的不可恢复硬件故障

  • 我正经历着这种行为,但我想确认一下。你解释得很透彻!谢谢!谢谢顺便说一句,我认为未捕获的异常只会杀死发生它们的线程。默认的未捕获异常处理程序只会终止该线程,只有当它是最后一个非守护进程线程时,才会停止VM。