package io.lumify.core.util; import io.lumify.core.exception.LumifyException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class ExecutorServiceUtil { private static final ExecutorService pool = Executors.newCachedThreadPool(); public static <T> T[] runAllAndWait(Callable<T>... tasks) { try { List<T> results = new ArrayList<T>(tasks.length); List<Future<T>> futures = pool.invokeAll(Arrays.asList(tasks)); for (Future<T> future : futures) { results.add(future.get()); } return (T[]) results.toArray(); } catch (Exception ex) { throw new LumifyException("Failed to execute tasks", ex); } } }