code: public void execute() throws IOException {
      boolean retryAllowed;
      Preconditions.checkState(!requestInfos.isEmpty());
      HttpRequest batchRequest = requestFactory.buildPostRequest(this.batchUrl, null);
      // NOTE: batch does not support gzip encoding
      HttpExecuteInterceptor originalInterceptor = batchRequest.getInterceptor();
      batchRequest.setInterceptor(new BatchInterceptor(originalInterceptor));
      int retriesRemaining = batchRequest.getNumberOfRetries();
  
      do {
        retryAllowed = retriesRemaining > 0;
        MultipartContent batchContent = new MultipartContent();
        batchContent.getMediaType().setSubType("mixed");
        int contentId = 1;
        for (RequestInfo<?, ?> requestInfo : requestInfos) {
          batchContent.addPart(new MultipartContent.Part(
              new HttpHeaders().setAcceptEncoding(null).set("Content-ID", contentId++),
              new HttpRequestContent(requestInfo.request)));
        }
        batchRequest.setContent(batchContent);
        HttpResponse response = batchRequest.execute();
        BatchUnparsedResponse batchResponse;
        try {
          // Find the boundary from the Content-Type header.
          String boundary = "--" + response.getMediaType().getParameter("boundary");
  
          // Parse the content stream.
          InputStream contentStream = response.getContent();
          batchResponse =
              new BatchUnparsedResponse(contentStream, boundary, requestInfos, retryAllowed);
  
          while (batchResponse.hasNext) {
            batchResponse.parseNextResponse();
          }
        } finally {
          response.disconnect();
        }
  
        List<RequestInfo<?, ?>> unsuccessfulRequestInfos = batchResponse.unsuccessfulRequestInfos;
        if (!unsuccessfulRequestInfos.isEmpty()) {
          requestInfos = unsuccessfulRequestInfos;
        } else {
          break;
        }
        retriesRemaining--;
      } while (retryAllowed);
      requestInfos.clear();
    }
docs: Executes all queued HTTP requests in a single call, parses the responses and invokes callbacks.
  
  <p>
  Calling {@link #execute()} executes and clears the queued requests. This means that the
  {@link BatchRequest} object can be reused to {@link #queue} and {@link #execute()} requests
  again.
  </p>