title: java: why main thread waits for child thread to finish
body: <p>I have a simple java program. A main thread (<code>main()</code>) is created and starts another thread <code>t</code>. </p>
  
  <pre><code>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");
      }
  }
  </code></pre>
  
  <p>Output:</p>
  
  <pre><code>end
  Inside thread
  Inside thread
  Inside thread
  ....
  ....
  </code></pre>
  
  <p>It infinitely prints <strong>Inside thread</strong>. I am not waiting for child thread in main thread using join(). Shouldn't main thread exit after printing <strong>end</strong>? </p>
  
  <p><strong>Update:</strong></p>
  
  <blockquote>
    <p>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:</p>
    
    <ul>
    <li>The exit method of class Runtime has been called and the security    manager has permitted the exit operation to take place.</li>
    <li>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.</li>
    </ul>
  </blockquote>
  
  <p>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.</p>