java 子线程退出_java – 在子线程完成执行之前主线程将退出吗?

我读了2篇文章

在上面的文章中,在“线程终止”段中,它在Red中声明“如果父线程终止,它的所有子线程也会终止”.

在上面的文章中,该页面的最后一行指出“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个文件有时没有得到处理.但很多时候,所有的文件都得到处理,我没有任何问题.

解决方法:

Java区分用户线程和另一种称为守护程序线程的线程.这两种类型的线程之间的区别在于,如果JVM确定应用程序中运行的唯一线程是守护程序线程(即,没有用户线程),则Java运行时会关闭应用程序.另一方面,如果至少有一个用户线程处于活动状态,则Java运行时将不会终止您的应用程序.

当main()方法最初从Java运行时接收控制时,它将在用户线程的上下文中执行.只要主方法线程或任何其他用户线程保持活动状态,您的应用程序将继续执行.

在您的情况下,线程是用户线程,因此允许在主线程退出之前完成.

i am processing some files. in testA thread A alone, 1 file alone is

not getting processed some times. but many times

上述原因可能是除了线程退出之外的其他原因.它可能是文件锁,同步问题等.

When a Java Virtual Machine starts up, there is usually a single

non-daemon thread (which typically calls the method named main of some

designated class). The Java Virtual Machine continues to execute

threads until either of the following occurs:

The exit method of class Runtime has been called and the security

manager has permitted the exit operation to take place. All threads

that are not daemon threads have died, either by returning from the

call to the run method or by throwing an exception that propagates

beyond the run method.

标签:java

来源: https://codeday.me/bug/20190923/1815754.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值