Вызов более 2-х RecursiveActionTasks в compute()

Каков был бы недостаток, чтобы вызвать много RecursiveAction в следующем коде?

класс RecursiveActionThing extends RecursiveAction {

int numbers = 1000;
public RecursiveActionThing(int numbers)
{
    this.numbers = numbers;

}
public void compute()
{
    if (numbers<500)
    {
        for (int i =0;i<numbers;i++)
        {
            System.out.println(i);
        }
    }
    else{
        invokeAll(new RecursiveActionThing(numbers/2),new RecursiveActionThing(numbers/2), new RecursiveActionThing(numbers/2), new RecursiveActionThing(numbers/2));

    }
}

}

До сих пор я видел только вызов 2 задач, поэтому, вероятно, выполнение вышеупомянутого вызова приведет к огромным накладным расходам при создании всех этих задач, однако почему это допускается размещением varargs в качестве параметра? В определенной ситуации может быть полезно? Какие? Заранее спасибо.

2 ответа

Прекрасный пример этого есть в тестовых классах, поставляемых с jsr166, MatrixMultiply.java. Вы можете найти его здесь.

Это не имеет особого смысла. Если вы хотите, чтобы определенное число было выполнено, вы должны иметь возможность контролировать его самостоятельно через деление с интервалами 2.

Однако, почему это разрешено, помещая varargs в качестве параметра? В определенной ситуации может быть полезно? Какие?

Я не могу придумать каких-либо полезных причин, по которым это будет использовано. Это перенос ExecutorService и только реализация функциональности. Я бы не рекомендовал это.

Посмотрите на этот вопрос. Это не действует так, как вы надеетесь.

ForkJoinPool, кажется, тратить нить

Другие вопросы по тегам