public static void doMultiThreadedPuts(String regionName, int numPuts) {
    final AtomicInteger ai = new AtomicInteger(-1);
    final ExecutorService execService = Executors.newFixedThreadPool(5, new ThreadFactory() {
      final AtomicInteger threadNum = new AtomicInteger();

      @Override
      public Thread newThread(final @NotNull Runnable r) {
        Thread result = new Thread(r, "Client Put Thread-" + threadNum.incrementAndGet());
        result.setDaemon(true);
        return result;
      }
    });

    final Region<Integer, Integer> r = cache.getRegion(SEPARATOR + regionName);

    List<Callable<Object>> tasks = new ArrayList<>();
    for (long i = 0; i < 5; i++) {
      tasks.add(new PutTask(r, ai, numPuts));
    }

    try {
      List<Future<Object>> l = execService.invokeAll(tasks);
      for (Future<Object> f : l) {
        f.get();
      }
    } catch (InterruptedException | ExecutionException e1) {
      // TODO: eats exception
      e1.printStackTrace();
    }

    execService.shutdown();
  }
To be used only for ParallelGatewaySender.

@param senderId Id of the ParallelGatewaySender
geode-wan/src/distributedTest/java/org/apache/geode/internal/cache/wan/WANTestBase.java