code: public void stop(){
          // acquire status lock
          synchronized(statusLock){
              // check current status
              if(status == SearchStatus.INITIALIZING || status == SearchStatus.RUNNING){
                  // log
                  LOGGER.debug("Search {} changed status: {} --> {}", this, status, SearchStatus.TERMINATING);
                  // update status
                  status = SearchStatus.TERMINATING;
                  // fire status update
                  fireStatusChanged(status);
              }
          }
      }
docs: <p>
  Requests the search to stop. May be called from outside the search, e.g. by a stop criterion,
  as well as internally, when the search comes to its natural end. In the latter case, it is
  absolutely guaranteed that the step from which the search was requested to stop will be the
  last step executed during the current run. If the current search status is not
  {@link SearchStatus#INITIALIZING} or {@link SearchStatus#RUNNING}, calling this method has
  no effect. Else, it changes the search status to {@link SearchStatus#TERMINATING}.
  </p>
  <p>
  In case the search is already requested to terminate during initialization, it will complete
  initialization, but is guaranteed to stop before executing any search steps.
  </p>