多线程执行工具方法

发布时间 2023-08-30 18:07:51作者: 数学与IT
    public static <P, T> List<CompletableFuture<T>> multiThreadRun(Function<P, T> run, Collection<P> list, int threadSize, Executor executor, boolean waitRunFinal) {
        List<CompletableFuture<T>> cf = new ArrayList<>(threadSize);
        for (P obj : list) {
            cf.add(CompletableFuture.supplyAsync(() -> run.apply(obj), executor));
            if (waitRunFinal && cf.size() == threadSize) {
                cf.forEach(CompletableFuture::join);
                cf.clear();
            }
        }
        if(waitRunFinal) {
            cf.forEach(CompletableFuture::join);
        }
        return cf;
    }