code: void beginSynchronizing() throws IOException {
      // Synchronization is performed in other threads.
      Zxid lastZxid = persistence.getLatestZxid();
      ClusterConfiguration clusterConfig = persistence.getLastSeenConfig();
      long proposedEpoch = persistence.getProposedEpoch();
      for (PeerHandler ph : this.quorumMap.values()) {
        ph.setSyncTask(new SyncPeerTask(ph.getServerId(), ph.getLastZxid(),
                                        lastZxid, clusterConfig),
                       proposedEpoch);
        ph.startSynchronizingTask();
      }
    }
docs: Starts synchronizing peers in background threads.
  
  @param es the ExecutorService used to running synchronizing tasks.
  @throws IOException in case of IO failure.