title: Understanding join() method example
body: <p>The Java thread join() method confuses me a bit. I have following example</p>
  
  <pre><code>class MyThread extends Thread {
      private String name;
      private int sleepTime;
      private Thread waitsFor;
  
      MyThread(String name, int stime, Thread wa) { … }
  
      public void run() {
          System.out.print("["+name+" ");
  
          try { Thread.sleep(sleepTime); }
          catch(InterruptedException ie) { }
  
          System.out.print(name+"? ");
  
          if (!(waitsFor == null))
          try { waitsFor.join(); }
          catch(InterruptedException ie) { }
  
          System.out.print(name+"] ");
  </code></pre>
  
  <p>And</p>
  
  <pre><code>public class JoinTest2 {
      public static void main (String [] args) {
          Thread t1 = new MyThread("1",1000,null);
          Thread t2 = new MyThread("2",4000,t1);
          Thread t3 = new MyThread("3",600,t2);
          Thread t4 = new MyThread("4",500,t3);
          t1.start();
          t2.start();
          t3.start();
          t4.start();
      }
  }
  </code></pre>
  
  <p>In which order are the threads terminated? </p>