Как работает этот код с 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;
            
        }

    }

}

Ответы (0 шт):