小编zex*_*640的帖子

ForkJoinPool#awaitQuiescence 实际上是如何工作的?

我有下一个实现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 次。 …

java-8 forkjoinpool

3
推荐指数
1
解决办法
97
查看次数

标签 统计

forkjoinpool ×1

java-8 ×1