我有下一个实现RecursiveAction,这个类的单一目的 - 是从 0 到 9 打印,但如果可能的话,从不同的线程打印:
public class MyRecursiveAction extends RecursiveAction {
private final int num;
public MyRecursiveAction(int num) {
this.num = num;
}
@Override
protected void compute() {
if (num < 10) {
System.out.println(num);
new MyRecursiveAction(num + 1).fork();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我认为调用awaitQuiescence将使当前线程等待所有任务(提交和分叉)完成:
public class Main {
public static void main(String[] args) {
ForkJoinPool forkJoinPool = new ForkJoinPool();
forkJoinPool.execute(new MyRecursiveAction(0));
System.out.println(forkJoinPool.awaitQuiescence(5, TimeUnit.SECONDS) ? "tasks" : "time");
}
}
Run Code Online (Sandbox Code Playgroud)
但我并不总是得到正确的结果,而不是打印 10 次,打印 0 到 10 次。 …