code: StreamItem readItem(long timeout, TimeUnit unit) throws InterruptedException {
      checkState(isRunning(), "Cannot read items from a %s StreamService", state());
      StreamItem line = outputQueue.poll(timeout, unit);
      if (line == EOF_ITEM) {
        closeStream();
      }
      return (line == null) ? TIMEOUT_ITEM : line;
    }
docs: Reads a {@link StreamItem} from one of the streams waiting for one to become available if
  necessary.