0

次のコードで多くの RecursiveAction を呼び出すことの欠点は何ですか?

class 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 をパラメーターとして配置することでそれが許可されるのはなぜですか? 特定の状況で役立つかもしれませんか?どれ?前もって感謝します。

4

2 に答える 2

0

これはあまり意味がありません。特定の数を実行したい場合は、2 の間隔で除算することで自分で制御できるはずです。

しかし、varargs をパラメーターとして配置することで許可されるのはなぜですか? 特定の状況で役立つかもしれませんか?どれ?

これが使用される有用な理由は考えられません。これは ExecutorService の継承であり、機能を実装しているだけです。私はそれをお勧めしません。

この質問を見てください。期待どおりに機能しません。

ForkJoinPool がスレッドを浪費しているようです

于 2013-09-07T17:55:52.737 に答える
0

jsr166、MatrixMultiply.java で提供されるテスト クラスには、この良い例があります。ここで見つけることができます。

于 2013-09-07T17:51:09.077 に答える