code: public static CloseableJobListener parallelJobListener(List<JobListener> jobListeners) {
      Iterables.removeIf(jobListeners, Predicates.isNull());
      return new ParallelJobListener(jobListeners);
    }
docs: Chains a given {@link List} of {@link JobListener}s into a single {@link JobListener}. The specified {@link JobListener}s
  will all be executed in parallel.
  
  @param jobListeners is a {@link List} of {@link JobListener}s that need to be executed
  
  @return a {@link CloseableJobListener}, which is similar to {@link JobListener}, except
  {@link CloseableJobListener#close()} will block until all {@link JobListener}s have finished their executions.