Java 仅在 ForkJoinPool 提交后执行代码

Java execute code only after ForkJoinPool submit

我有 1 个并行处理代码使用 ForkJoinPool:

ForkJoinPool customThreadPool = new ForkJoinPool(4);
customThreadPool.submit(() -> {
    list.parallelStream().forEach(this::process);
});

我正在通过一些控制器调用它。此代码异步运行,因此控制器响应将立即发生,异步过程将在后台发生。

现在我想在所有过程完成后触发另一个处理。 ForkJoinPool提交完成后,有没有什么方式或方法才执行。

我尝试了 submit.isDonesubmit.isCompletedNormally 但这不是在提交完成后立即运行。

submit方法returns一个Future你需要等待。所以你在上面调用 get 。我认为像这样的一些代码适用于您的情况

import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;

class Scratch {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        List<String> list = List.of("a", "b", "c");
        ForkJoinPool customThreadPool = new ForkJoinPool(4);
        customThreadPool.submit(() -> {
            list.parallelStream().forEach(Scratch::process);
        }).get();
        customThreadPool.submit(() -> System.out.println("done"));

    }

    private static void process(String s) {
        System.out.println(s);
    }
}

它打印

b
a
c
done

请注意 a、b、c 的顺序不确定,但 done 总是最后的