I read this statement:
The main thread must be the last thread to finish execution. When the main thread stops, the program terminates.
The program terminates when all non-daemon threads die (a daemon thread is a thread marked with setDaemon(true)
; it's usually used for utility threads). From the documentation:
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.