code: private void copyPartsInParallel(CopyPartRequestFactory requestFactory) {
          while (requestFactory.hasMoreRequests()) {
              if (threadPool.isShutdown())
                  throw new CancellationException(
                          "TransferManager has been shutdown");
              CopyPartRequest request = requestFactory.getNextCopyPartRequest();
              futures.add(threadPool.submit(new CopyPartCallable(s3, request)));
          }
      }
docs: Submits a callable for each part to be copied to our thread pool and
  records its corresponding Future.