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

  • Post author:
  • Post category: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.