Подтвердить что ты не робот

Завершение программы на выходе основного потока?

У меня есть два потока: основной поток и поток, сгенерированный из основного потока.

Когда основной поток выйдет, завершится ли вся программа?

4b9b3361

Ответ 1

Нет.

Программы Java завершаются, когда заканчиваются все не-демонные потоки.

В документации указано:

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

  • Вызывается метод exit класса Runtime и менеджер по безопасности разрешил выхода.
  • Все потоки, которые не являются потоками демона, умерли, либо возвратившись от вызова метода run или путем исключения исключения из распространяется за пределы метода run.

Если вы не хотите, чтобы среда выполнения ожидала поток, вызовите метод setDaemon.

Ответ 2

Нет. Главная тема - поток не-Demon, если только ваш потоковый поток не является потоком demon, программа не будет завершена, даже если основной поток заканчивается перед дочерним потоком. Вы можете проверить это, используя нижеприведенную программу.

public class app {

public static void main(String[] args) throws InterruptedException {
    app2.mt=Thread.currentThread();
    app2 t = new app2();
    t.start();
    System.out.println("Main starts");
    Thread.sleep(2000);
    System.out.println("Main ends");

  }
}

class app2 extends Thread{
static Thread mt;
public void run(){
    try {
        mt.join();//waits till main thread dies.
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    System.out.println("child thread");
  }
}