code: void waitRun(long waitMillis, int waitNanos, boolean cancelOnTimeOut) {
          if (!mDone) {
              synchronized (this) {
                  if (!mDone) {
                      try {
                          this.wait(waitMillis, waitNanos);
                      } catch (InterruptedException ignored) {
                      } finally {
                          if (!mDone && cancelOnTimeOut)
                              mDone = true;
                      }
                  }
              }
          }
      }
docs: Wait for a period of time to run end
  
  @param waitMillis      wait milliseconds time
  @param waitNanos       wait nanoseconds time
  @param cancelOnTimeOut when wait end cancel the runner