ForkJoinPool 执行任务两次

ForkJoinPool executes task two times

以下代码打印出 'Inside...' 两次。

import java.util.concurrent.ForkJoinPool;

public class Test {

  public static void main(String[] args) {

    ForkJoinPool forkJoinPool = new ForkJoinPool(3);

    forkJoinPool.submit(() -> {
      System.out.println("Inside...");
    }).invoke();
  }
}

这是为什么?

您不应同时调用 submitinvokeForkJoinPool#submit 将任务发布到池中,并在线程就绪后执行。

该方法也 returns ForkJoinTask,您调用 invoke,再次执行任务并等待其结果。