Threads Java

// : c13:Joining.java
// Understanding join().
// From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002
// www.BruceEckel.com. See copyright notice in CopyRight.txt.
class Sleeper extends Thread {
  private int duration;
  public Sleeper(String name, int sleepTime) {
    super(name);
    duration = sleepTime;
    start();
  }
  public void run() {
    try {
      sleep(duration);
    } catch (InterruptedException e) {
      System.out.println(getName() + " was interrupted. "
          + "isInterrupted(): " + isInterrupted());
      return;
    }
    System.out.println(getName() + " has awakened");
  }
}
class Joiner extends Thread {
  private Sleeper sleeper;
  public Joiner(String name, Sleeper sleeper) {
    super(name);
    this.sleeper = sleeper;
    start();
  }
  public void run() {
    try {
      sleeper.join();
    } catch (InterruptedException e) {
      throw new RuntimeException(e);
    }
    System.out.println(getName() + " join completed");
  }
}
public class Joining {
  public static void main(String[] args) {
    Sleeper sleepy = new Sleeper("Sleepy", 1500), grumpy = new Sleeper(
        "Grumpy", 1500);
    Joiner dopey = new Joiner("Dopey", sleepy), doc = new Joiner("Doc",
        grumpy);
    grumpy.interrupt();
  }
} ///:~