ForkJoinPool私RecursiveTaskが上で実行されようとしているれている知っています

とりこエリュシオン:

私は、私は自分で自分のフォークタスクを実行していることを確認する方法を理解するのに苦労を抱えているForkjoinPool代わりに、それは私がここであなたをスレッドプールあなたは示していないときに何が起こるかであると仮定し、共通のプールを、使用したの、実行したいです。

以下のコードを見てみると、私の間にはリンクがないと思われるfjpインスタンスと新しくインスタンス化されたFibonacciCalculatorオブジェクトが。これは私が私が前提となりfjp、実際のサブタスクのために使用されていません。どうやってするか?

object FJPoolApp extends App {
  val fjp = new ForkJoinPool()
  println(fjp.submit(new FibonacciCalculator(10)).get)
}

class FibonacciCalculator(k : Int) extends RecursiveTask[Int] {
  override def compute(): Int = {
    if (k <= 1) k
    else {
      val left = new FibonacciCalculator(k-1).fork()  <-- where is this being run?
      val right = new FibonacciCalculator(k-2).fork() <-- where is this being run?
      left.join() + right.join()
    }
  }
}
なスロー:

ここでのドキュメントが何ForkJoinTask#fork()言います:

非同期的にこのタスクを実行するために配置する現在のタスクが実行されているプールに 【追加強調]該当する場合、または使用しForkJoinPool.commonPool()ない場合inForkJoinPool()

そして、ここでのドキュメントがありますForkJoinTask#inForkJoinPool()

現在のスレッドがされている場合にtrueを返しForkJoinWorkerThreadて実行するForkJoinPool計算

あなたは原始実行されるためFibonacciCalculatorForkJoinPool、タスクの内部で作成されたフォークは、その中で実行されている同じプール。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=361954&siteId=1