在子线程完成执行之前主线程将退出吗?
我读了2篇文章
http://www.cs.mtu.edu/~shene/NSF-3/e-Book/FUNDAMENTALS/thread-management.html
在上面的文章中,在"线程终止"段中,它在Red中声明"如果父线程终止,它的所有子线程也会终止".
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();
}
Run Code Online (Sandbox Code Playgroud)
我想知道会发生什么,主线程在子线程完成执行之前终止?如果是这样,孩子仍然会线程,继续执行?
我尝试运行该程序,有时候即使主线程退出,所有子线程也会完成执行.在2个线程中,我正在处理一些文件.在testA线程A中,单独的1个文件有时没有得到处理.但很多时候,所有的文件都得到处理,我没有任何问题.
Sur*_*mar 28
Java区分用户线程和另一种称为守护程序线程的线程.这两种类型的线程之间的区别在于,如果JVM确定应用程序中运行的唯一线程是守护程序线程(即,没有用户线程),则Java运行时会关闭应用程序.另一方面,如果至少有一个用户线程处于活动状态,则Java运行时将不会终止您的应用程序.
当main()方法最初从Java运行时接收控制时,它将在用户线程的上下文中执行.只要主方法线程或任何其他用户线程保持活动状态,您的应用程序将继续执行.
在您的情况下,线程是用户线程,因此允许在主线程退出之前完成.
我正在处理一些文件.在testA线程A中,单独的1个文件有时没有得到处理.但很多次
上述原因可能是除了线程退出之外的其他原因.它可能是文件锁,同步问题等.
https://docs.oracle.com/javase/10/docs/api/java/lang/Thread.html:
当Java虚拟机启动时,通常会有一个非守护程序线程(通常调用某个指定类的名为main的方法).Java虚拟机继续执行线程,直到发生以下任一情况:
已调用类Runtime的exit方法,并且安全管理器已允许执行退出操作.所有非守护程序线程的线程都已死亡,无论是通过从run方法调用返回还是抛出传播超出run方法的异常.
| 归档时间: |
|
| 查看次数: |
32919 次 |
| 最近记录: |