code: @Override
      public void join(final long millis) throws InterruptedException {
          for (final Thread thread : this.threads) {
              thread.join(millis);
          }
      }
docs: Join to internal threads and wait millis time per thread or until all
  threads are finished if millis is 0.
  
  @param millis the time to wait in milliseconds for the threads to join; a timeout of 0 means to wait forever.
  @throws InterruptedException if any thread has interrupted the current thread.
  The interrupted status of the current thread is cleared when this exception is thrown.