对 CountedCompleter 的文档和来源感到困惑

Confused by docs and source of CountedCompleter

这里是java.util.concurrent.CountedCompleter class (JDK 1.8.0_25).

的代码片段
/**
 * If the pending count is nonzero, decrements the count;
 * otherwise invokes {@link #onCompletion(CountedCompleter)}
 * and then similarly tries to complete this task's completer,
 * if one exists, else marks this task as complete.
 */
public final void tryComplete() {
    CountedCompleter<?> a = this, s = a;
    for (int c;;) {
        if ((c = a.pending) == 0) {
            a.onCompletion(s);
            if ((a = (s = a).completer) == null) {
                s.quietlyComplete();
                return;
            }
        }
        else if (U.compareAndSwapInt(a, PENDING, c, c - 1))
            return;
    }
}

这让我很困惑。文档说:"and then similarly tries to complete this task's completer",但我没有看到此任务的完成者对 'complete' 的任何调用;或对它的任何其他调用。

有人用过这个 class 吗?这是文档或实施的问题吗?我也可能以错误的方式烹饪它。任何有关如何正确处理此 class 的想法都将受到赞赏。

你糊涂了?每个人都很困惑。四年来,我一直在撰写有关 F/J 框架的评论,我可以告诉您,8u40 的复杂程度已达到临界水平。这个 class 存在的原因是因为 join() doesn't work。为了绕过 Java8 流的停滞线程,架构师发明了这个 class.

这个 class 的工作方式是为每个 fork() 添加 ToPendingCount()。在 compute() 中,完成后,您将尝试 Complete()。当计数为零时,该方法调用您的 onCompletion()。有点乱,但如果你的代码很简单,它就可以工作。

您看到的其余代码适用于当前 CountedCompleter 具有自己的 CountedCompleter 对象链的情况。我猜这可能是为了 parallel.stream 处理。