とりこエリュシオン:
私は、私は自分で自分のフォークタスクを実行していることを確認する方法を理解するのに苦労を抱えている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
計算
あなたは原始実行されるためFibonacciCalculator
でForkJoinPool
、タスクの内部で作成されたフォークは、その中で実行されている同じプール。