docs: protected void throwException() throws InterruptedException, IOException {
  
          if (this.exception instanceof IOException) {
              throw (IOException) this.exception;
          }
          if (this.exception instanceof InterruptedException) {
              throw (InterruptedException) this.exception;
          }
          if (this.exception instanceof RuntimeException) {
              throw (RuntimeException) this.exception;
          }
          throw new RuntimeException(this.exception);
      }