假设我创建了一个 Java 应用程序,它的 main 方法中运行了一个线程。
在 main 方法中的所有代码都被执行之后。应用程序会等待线程直到它完成执行,还是会终止应用程序和 JVM。
假设我创建了一个 Java 应用程序,它的 main 方法中运行了一个线程。
在 main 方法中的所有代码都被执行之后。应用程序会等待线程直到它完成执行,还是会终止应用程序和 JVM。
从java.lang.Thread
文档:
当 Java 虚拟机启动时,通常有一个非守护线程(通常调用某个指定类的名为 main 的方法)。Java 虚拟机继续执行线程,直到发生以下任一情况:
- 已调用 Runtime 类的退出方法,并且安全管理器已允许进行退出操作。
- 所有不是守护线程的线程都已经死亡,要么通过调用 run 方法返回,要么抛出传播到 run 方法之外的异常。
所以,是的,它会等待,但不会等待标记为守护线程的线程。
您可以看到它使用以下代码:
public class ThreadTest {
public static void main(String[] args) {
Thread thread = new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("I'm still here!");
}
});
// uncomment following line to test with daemon thread
//thread.setDaemon(true);
thread.start();
System.out.println("Finished!");
}
}
应用程序会等待线程直到它完成执行
是的,无论主线程是否完全执行,它都会等待执行完成子线程。
它不会等待守护线程。如果线程通过调用设置为守护线程Thread.setDaemon(true);
这取决于启动的线程是什么类型的线程。当唯一运行的线程都是守护线程时,JVM 退出。
默认情况下,线程不是守护线程。要使线程成为守护线程,请在启动它之前调用。Thread.setDaemon(true)