Жизненный цикл Java-приложения - PullRequest
2 голосов
/ 27 декабря 2010

Когда заканчивается типичное Java-приложение?

Если я запускаю новый поток в методе main, а затем метод main завершается, но другой поток продолжает работать, приложение все равно будет работать, пока все его потоки не прекратятся, не так ли?

Спасибо и счастливого Рождества!

Ответы [ 2 ]

6 голосов
/ 27 декабря 2010

Да, если это не нить демона.Цитирование из Thread API :

Когда запускается виртуальная машина Java, обычно существует один поток, не являющийся демоном (который обычно вызывает метод с именем main некоторого назначенного класса),Виртуальная машина Java продолжает выполнять потоки до тех пор, пока не произойдет одно из следующих действий:

  • Был вызван метод выхода класса Runtime, и диспетчер безопасности разрешил выполнение операции выхода.
  • Все потоки, которые не являются потоками демонов, умерли, либо возвращаясь из вызова метода run, либо выбрасывая исключение, которое распространяется за пределы метода run.
1 голос
/ 27 декабря 2010

Функция main () определяет ваш основной пользовательский поток.У вас могут быть и другие созданные пользователем темы.Возможно, вы также вызвали setDeamon () в некоторых из этих потоков.

JVM завершится, когда:

  1. Основная подпрограмма завершится, и других потоков, не связанных с демоном, не будет
  2. В главном потоке есть неперехваченное исключение, и нет других потоков, не являющихся демонами
  3. System.exit () или Runtime.halt () называется
  4. Внутренняя ошибка JVM(редко)
  5. Сигнал Kill -9 от ОС
  6. Сбой питания или аналогичный неисправимый аппаратный сбой
...