Java fixed worker pool with error collection

Java
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public final class Pool {
    public static <T> List<T> run(List<Callable<T>> tasks, int workers) throws Exception {
        var pool = Executors.newFixedThreadPool(workers);
        try {
            List<Future<T>> futures = pool.invokeAll(tasks);
            List<T> out = new ArrayList<>();
            for (Future<T> f : futures) out.add(f.get());
            return out;
        } finally {
            pool.shutdown();
        }
    }
}