Java 应用程序主方法是否在终止前等待线程
假设我是一个Java应用程序,它的主方法中运行着一个线程 在执行主方法中的所有代码之后。应用程序会等待线程直到它完成执行,还是仅仅终止应用程序和JVM 应用程序会等待线程直到它完成执行吗 是的,无论主线程是否完全执行,它都将等待子线程的执行完成 它不会等待守护进程线程。如果通过调用Java 应用程序主方法是否在终止前等待线程,java,Java,假设我是一个Java应用程序,它的主方法中运行着一个线程 在执行主方法中的所有代码之后。应用程序会等待线程直到它完成执行,还是仅仅终止应用程序和JVM 应用程序会等待线程直到它完成执行吗 是的,无论主线程是否完全执行,它都将等待子线程的执行完成 它不会等待守护进程线程。如果通过调用thread.setDaemon(true)将线程设置为守护进程线程来自文档: 当Java虚拟机启动时,通常只有一个 非守护进程线程(通常调用某些 指定类别)。Java虚拟机继续执行 线程,直到发生以下任一情况: 类
thread.setDaemon(true)将线程设置为守护进程线程代码>来自文档:
当Java虚拟机启动时,通常只有一个
非守护进程线程(通常调用某些
指定类别)。Java虚拟机继续执行
线程,直到发生以下任一情况:
- 类运行时的exit方法已被调用,并且安全管理器已允许执行exit操作
- 通过调用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!");
}
}
这取决于启动线程的类型。当运行的线程都是守护进程线程时,JVM退出
默认情况下,线程不是守护进程线程。要使线程成为守护进程线程,请在启动之前调用。我建议您尝试一下。