code: public synchronized void start() {
          state = State.START;
          dispatchEvent(LeaderElectionEventType.START);
  
          logger.info("Starting leader election support");
  
          if (zooKeeper == null) {
              throw new IllegalStateException(
                      "No instance of zookeeper provided. Hint: use setZooKeeper()");
          }
  
          if (hostName == null) {
              throw new IllegalStateException(
                      "No hostname provided. Hint: use setHostName()");
          }
  
          try {
              makeOffer();
              determineElectionStatus();
          } catch (KeeperException e) {
              becomeFailed(e);
          } catch (InterruptedException e) {
              becomeFailed(e);
          }
      }
docs: <p>
  Start the election process. This method will create a leader offer,
  determine its status, and either become the leader or become ready. If an
  instance of {@link ZooKeeper} has not yet been configured by the user, a
  new instance is created using the connectString and sessionTime
  specified.
  </p>
  <p>
  Any (anticipated) failures result in a failed event being sent to all
  listeners.
  </p>