public final synchronized void join(long timeoutInMilliseconds) throws InterruptedException { join(timeoutInMilliseconds, 0);
public final synchronized void join() throws InterruptedException { if (started) while (!isDead()) wait(0);
  public final synchronized void join(long timeoutInMilliseconds) throws InterruptedException {    join(timeoutInMilliseconds, 0);  }