I read the following in the Thread API:
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.
In the program below I have two Threads, the first thread reaches the end of
main() and the second thread reaches the end of run() because I see all of
the print statements. But the program doesn't terminate (I have to kill it
with Control + c) and I'm wondering why that is.
public class Test {
public static void main(String[] args) throws Exception {
Test2 h = new Test2();
System.out.println("before start");
h.start();
System.out.println("after start");
}
}
public class Test2 extends Thread {
public void run() {
System.out.println("starting run");
System.out.println("ending run");
}
}