Java app lifecycle

房东的猫 提交于 2019-12-07 23:36:50

问题


When does a typical Java app finish?

If I start a new thread in the main method and then the main method finishes, but the other thread continues working, the app would still be on until all it's threads have died, wouldn't it?

Thanks & Merry Christmas!


回答1:


Yes, unless it's a deamon thread. Quoting from Thread API:

When a Java Virtual Machine starts up, there is usually a single non-daemon thread (which typically calls the method named main of some designated class). The Java Virtual Machine continues to execute threads until either of the following occurs:

  • The exit method of class Runtime has been called and the security manager has permitted the exit operation to take place.
  • All threads that are not daemon threads have died, either by returning from the call to the run method or by throwing an exception that propagates beyond the run method.



回答2:


The main() function defines your main user thread. You might have other user threads that you created as well. You might also have called setDeamon() on some of those threads.

The JVM will end when:

  1. The main routine ends and there are no other non-deamon threads
  2. You have an uncaught Exception in the main thread and there are no other non-deamon threads
  3. System.exit() or Runtime.halt() is called
  4. Internal JVM error (rare)
  5. Kill -9 signal from OS
  6. Power failure or similar non-recoverable hardware failure


来源:https://stackoverflow.com/questions/4540152/java-app-lifecycle

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!