java不等待子进程返回,java:为什么主线程等待子线程完成

I have a simple java program. A main thread (main()) is created and starts another thread t.

class T extends Thread{

@Override

public void run() {

while (true){

System.out.println("Inside thread");

}

}

}

public class Main {

public static void main(String[] args) {

Thread t = new T();

t.start();

//t.join();

System.out.println("end");

}

}

Output:

end

Inside thread

Inside thread

Inside thread

....

....

It infinitely prints Inside thread. I am not waiting for child thread in main thread using join(). Shouldn't main thread exit after printing end?

Update:

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.

I found the reason. The second point clarified it. I was in assumption that all child thread will terminates after main thread exits (I was wrong) and JVM should shutdown.

解决方案

The main thread has exited. It's the other thread that's still alive.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值