private void waitForRunningStatus() {
    for (ParallelGatewaySenderEventProcessor parallelProcessor : processors) {
      synchronized (parallelProcessor.getRunningStateLock()) {
        while (parallelProcessor.getException() == null && parallelProcessor.isStopped()) {
          try {
            parallelProcessor.getRunningStateLock().wait();
          } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
          }
        }
        Exception ex = parallelProcessor.getException();
        if (ex != null) {
          throw new GatewaySenderException(
              String.format("Could not start a gateway sender %s because of exception %s",
                  sender.getId(), ex.getMessage()),
              ex.getCause());
        }
      }
    }
  }
Parallel processor which constitutes of multiple {@link ParallelGatewaySenderEventProcessor}.
Each of the {@link ParallelGatewaySenderEventProcessor} is responsible of dispatching events from
a set of shadowPR or buckets. Once the buckets/shadowPRs are assigned to a processor it should
not change to avoid any event ordering issue.

The {@link ParallelGatewaySenderQueue} should be shared among all the
{@link ParallelGatewaySenderEventProcessor}s.
geode-core/src/main/java/org/apache/geode/internal/cache/wan/parallel/ConcurrentParallelGatewaySenderEventProcessor.java