protected ExecutorService newExecutor() {
    try {
      final ExecutorService executor = (ExecutorService) Class.forName("java.util.concurrent.ForkJoinPool").newInstance();
      LOG.debug("Using ForkJoinPool as task executor.");
      return executor;
    } catch (final Exception e) {
      LOG.debug("ForkJoinPool class is not available, using default executor.", e);
      return Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
    }
  }
protected ExecutorService newExecutor() {
    try {
      final ExecutorService executor = (ExecutorService) Class.forName("java.util.concurrent.ForkJoinPool").newInstance();
      LOG.debug("Using ForkJoinPool as task executor.");
      return executor;
    } catch (final Exception e) {
      LOG.debug("ForkJoinPool class is not available, using default executor.", e);
      return Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
    }
  }
protected ExecutorService newExecutor ( ) { try { final ExecutorService executor = ( ExecutorService ) Class . forName ( "java.util.concurrent.ForkJoinPool" ) . newInstance ( ) ; LOG . debug ( "Using ForkJoinPool as task executor." ) ; return executor ; } catch ( final Exception e ) { LOG . debug ( "ForkJoinPool class is not available, using default executor." , e ) ; return Executors . newFixedThreadPool ( Runtime . getRuntime ( ) . availableProcessors ( ) ) ; } }
The implementation uses jsr166 ForkJoinPool implementation in case it is available and can be used,
otherwise the default {@link ExecutorService} is used.

@return the {@link ExecutorService} responsible for running the tasks.
The implementation uses jsr166 ForkJoinPool implementation in case it is available and can be used otherwise the default { @link ExecutorService } is used .