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.