【发布时间】:2021-03-04 05:48:32
【问题描述】:
主线程会在子线程完成执行之前退出吗?
我读了两篇文章
http://www.cs.mtu.edu/~shene/NSF-3/e-Book/FUNDAMENTALS/thread-management.html
在上面的文章中,在“线程终止”段落中,它以红色表示“如果父线程终止,则其所有子线程也终止。”
http://www.roseindia.net/java/thread/overview-of-thread.shtml
在上面的文章中,该页面的最后一行声明“main() 方法执行可以完成,但程序将继续运行,直到所有线程都完成执行。”。
我觉得它们是矛盾的。如果我错了,请专家纠正我。
在我的程序中,一个带有 Main 方法的程序调用了 2 个线程的构造函数。在各个线程的构造函数中,我有 start() 方法。
TestA A = new TestA("TestA");
TestB B = new TestB("TestB");
public TestA(String name) {
System.out.println(name);
t = new Thread(this);
t.start();
}
我想知道发生了什么,主线程在子线程完成执行之前终止?如果是这样,子线程是否会继续执行?
我尝试运行程序,有时即使主线程退出,所有子线程也会执行完成。 在 2 个线程中,我正在处理一些文件。在单独的 testA 线程 A 中,单独的 1 个文件有时不会被处理。但很多时候,所有文件都得到处理,我没有任何问题。
【问题讨论】:
-
下面的答案很好,但他们没有解释为什么在链接的文章中写了
if the parent thread terminates, all of its child threads terminate as well.。实际上在 C/C++ 中与 Java 不同,当主线程终止时,进程终止,所有其他线程停止。
标签: java