Я обнаружил, что метод allOf() в CompletableFuture.java реализован с использованием чего-то вроде сбалансированного дерева.
Мне любопытно, почему он реализован именно так?
Можно ли его реализовать с помощью чего-то другого, например ConcurrentHashMap и AutomicInteger?
Я проверил исходный код этого класса.
/** Recursively constructs a tree of completions. */
static CompletableFuture andTree(CompletableFuture[] cfs, int lo, int hi) {
CompletableFuture d = new CompletableFuture();
if (lo > hi) // empty
d.result = NIL;
else {
CompletableFuture a, b;
int mid = (lo + hi) >>> 1;
if ((a = (lo == mid ? cfs[lo] :
andTree(cfs, lo, mid))) == null ||
(b = (lo == hi ? a : (hi == mid+1) ? cfs[hi] :
andTree(cfs, mid+1, hi))) == null)
throw new NullPointerException();
if (!d.biRelay(a, b)) {
BiRelay c = new BiRelay(d, a, b);
a.bipush(b, c);
c.tryFire(SYNC);
}
}
return d;
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... ng-somethi