Java应用程序生命周期

时间:2010-12-27 16:34:30

标签: java multithreading lifecycle main-method

典型的Java应用程序什么时候完成?

如果我在main方法中启动一个新线程,然后main方法结束,但另一个线程继续工作,那么应用程序仍然会打开,直到它的所有线程都已经死亡,不会是吗?

谢谢&圣诞快乐!

2 个答案:

答案 0 :(得分:6)

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

  

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

     
      
  • 已调用类Runtime的exit方法,安全管理器已允许退出操作。
  •   
  • 所有非守护程序线程的线程都已死亡,无论是通过调用run方法返回还是抛出一个超出run方法传播的异常。
  •   

答案 1 :(得分:1)

main()函数定义主用户线程。您可能还有其他用户线程。您可能还在某些线程上调用了setDeamon()。

JVM将在以下时间结束:

  1. 主程序结束,没有其他非deamon线程
  2. 主线程中有一个未被捕获的异常,并且没有其他非deamon线程
  3. 调用System.exit()或Runtime.halt()
  4. 内部JVM错误(罕见)
  5. 从OS中杀死-9信号
  6. 电源故障或类似的不可恢复的硬件故障