void stop() {
    stopAsync();
    try {
      // stopperThread is not null for sure
      // join() does nothing if thread already finished
      stopperThread.join();
      lifecycle.tryToMoveTo(Lifecycle.State.STOPPED);
    } catch (InterruptedException e) {
      Thread.currentThread().interrupt();
    }
    exit.exit(0);
  }
void stop ( ) { stopAsync ( ) ; try { stopperThread . join ( ) ; lifecycle . tryToMoveTo ( Lifecycle . State . STOPPED ) ; } catch ( InterruptedException e ) { Thread . currentThread ( ) . interrupt ( ) ; } exit . exit ( 0 ) ; }
Blocks until stopped in a timely fashion (see {@link org.sonar.process.StopperThread})