Как работает этот код с RecursiveTask?
Ребят, объясните, пожалуйста, как работает рекурсия в данном примере. Учу RecursiveTask и никак не могу понять.
Это простой код, который просто должен нагрузить процессор немного. Вопросы я оставил в комментариях.
Я новичок в джаве, был бы очень благодарен за помощь. Я понимаю, насколько глупыми для вас кажутся эти вопросы.
static class MyFork extends RecursiveTask<Long> {
long from;
long to;
public MyFork(long from, long to) {
this.from = from;
this.to = to;
}
@Override
protected Long compute() {
if ((to - from) <= from / numOfThreads) { // numPfThreads - кол-во логических ядер
// Вопрос: когда выполнится этот if? Разве from не всегда будет больше себя же разделенного на 12?
// САМА ОПЕРАЦИЯ
long j = 0;
for (long i = from; i < to; i++) j += i;
return j;
//
} else {
long middle = (to + from);
MyFork firstHalf = new MyFork(from, middle);
MyFork secondHalf = new MyFork(middle + 1, to);
firstHalf.fork();
long secondValue = secondHalf.compute(); // fork() запускает программу в отдельном потоке.
//Почему мы вызываем fork() только на первой половине
// Почему вторую половину мы рассчитываем при помощи compute().
return firstHalf.join() + secondValue;
}
}
}