wro4j-core/src/main/java/ro/isdc/wro/util/SchedulerHelper.java
private synchronized void destroyScheduler() {
    if (!poolInitializer.get().isShutdown()) {
      // Disable new tasks from being submitted
      poolInitializer.get().shutdown();
      if (future != null) {
        future.cancel(true);
      }
      try {
        while (!poolInitializer.get().awaitTermination(5, TimeUnit.SECONDS)) {
          LOG.debug("Termination awaited: {}", name);
          poolInitializer.get().shutdownNow();
        }
      } catch (final InterruptedException e) {
        LOG.debug("Interrupted Exception occured during scheduler destroy", e);
        // (Re-)Cancel if current thread also interrupted
        poolInitializer.get().shutdownNow();
        // Preserve interrupt status
        Thread.currentThread().interrupt();
      } finally {
        LOG.debug("[STOP] Scheduler terminated successfully! {}", name);
      }
    }
  }
private synchronized void destroyScheduler() {
    if (!poolInitializer.get().isShutdown()) {
      // Disable new tasks from being submitted
      poolInitializer.get().shutdown();
      if (future != null) {
        future.cancel(true);
      }
      try {
        while (!poolInitializer.get().awaitTermination(5, TimeUnit.SECONDS)) {
          LOG.debug("Termination awaited: {}", name);
          poolInitializer.get().shutdownNow();
        }
      } catch (final InterruptedException e) {
        LOG.debug("Interrupted Exception occured during scheduler destroy", e);
        // (Re-)Cancel if current thread also interrupted
        poolInitializer.get().shutdownNow();
        // Preserve interrupt status
        Thread.currentThread().interrupt();
      } finally {
        LOG.debug("[STOP] Scheduler terminated successfully! {}", name);
      }
    }
  }
private synchronized void destroyScheduler ( ) { if ( ! poolInitializer . get ( ) . isShutdown ( ) ) { // Disable new tasks from being submitted poolInitializer . get ( ) . shutdown ( ) ; if ( future != null ) { future . cancel ( true ) ; } try { while ( ! poolInitializer . get ( ) . awaitTermination ( 5 , TimeUnit . SECONDS ) ) { LOG . debug ( "Termination awaited: {}" , name ) ; poolInitializer . get ( ) . shutdownNow ( ) ; } } catch ( final InterruptedException e ) { LOG . debug ( "Interrupted Exception occured during scheduler destroy" , e ) ; // (Re-)Cancel if current thread also interrupted poolInitializer . get ( ) . shutdownNow ( ) ; // Preserve interrupt status Thread . currentThread ( ) . interrupt ( ) ; } finally { LOG . debug ( "[STOP] Scheduler terminated successfully! {}" , name ) ; } } }
The following method shuts down an ExecutorService in two phases, first by calling shutdown to reject incoming
tasks, and then calling shutdownNow, if necessary, to cancel any lingering tasks:

@param destroyNow
- if true, any running operation will be stopped immediately, otherwise scheduler will await termination.
The following method shuts down an ExecutorService in two phases first by calling shutdown to reject incoming tasks and then calling shutdownNow if necessary to cancel any lingering tasks :