首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >知道在哪个ForkJoinPool上执行我的RecursiveTask

知道在哪个ForkJoinPool上执行我的RecursiveTask
EN

Stack Overflow用户
提问于 2020-03-29 11:42:03
回答 1查看 128关注 0票数 0

我很难理解如何确保在自己的ForkjoinPool中运行分叉任务,而不是让它使用公共池,如果您没有指示要在哪个线程池中运行,则会发生什么情况。

从下面的代码来看,我的fjp实例与新实例化的FibonacciCalculator对象之间似乎没有任何联系。这让我假设我的fjp实际上并没有被用于子任务。怎么做?

代码语言:javascript
复制
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()
    }
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-29 11:49:09

以下是ForkJoinTask#fork()文档中的内容:

安排异步执行当前任务正在运行的池中的任务,如果适用,添加重点,或者如果不使用inForkJoinPool(),则使用ForkJoinPool.commonPool()

这是ForkJoinTask#inForkJoinPool()的文档

如果当前线程是作为

计算执行的ForkJoinWorkerThread,则ForkJoinPool返回true。

由于您在一个FibonacciCalculator中执行了原始ForkJoinPool,在任务中创建的分叉也会在同一个池中执行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60913677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档