只要发生下面俩种条件中的一个jvm就会退出:
- 除了deamon线程, 其他线程都已经运行结束(线程状态达到teminated)
- 某个线程调用了Runtime或者System的exit方法, 且该方法没有被java安全管理器阻止运行.
什么是deamon线程呢?
有时候你想要创建一个线程来帮助你做一个辅助工作, 但是你不希望这个线程会阻止jvm关闭. deamon线程就是用来做这种事情的.
Java线程被分为俩类:
- 普通线程
- deamon线程
当jvm启动的时候, 它所有创建的所有的线程(例如gc等其他线程等)都是deamon线程, 但是主线程除外.
当一个线程被创建的时候, 新线程会从创建它的父线程哪里继承它的deamon状态, 所以在默认情况下, 任何主线程创建的线程也都是普通线程.
普通线程和deamon线程唯一不同的就是它们在退出时产生的行为不一样. 当一个线程退出时, jvm会检查剩下的线程, 如果剩下的线程都是deamon线程的话, jvm会发起一个关闭序列.