code: private Thread createPump(InputStream is, OutputStream os,
                                  boolean closeWhenExhausted) {
          BlockingStreamPumper pumper = new BlockingStreamPumper(is, os, closeWhenExhausted);
          // pumper.setAutoflush(true); // always auto-flush
          final Thread result = new ThreadWithPumper(pumper);
          result.setDaemon(true);
          return result;
      }
docs: Creates a stream pumper to copy the given input stream to the
  given output stream.
  @param is the input stream to copy from.
  @param os the output stream to copy to.
  @param closeWhenExhausted if true close the inputstream.
  @return a thread object that does the pumping, subclasses
  should return an instance of {@code PumpStreamHandler.ThreadWithPumper
  ThreadWithPumper}.