gpt4 book ai didi

java - 知道我的 RecursiveTask 将在哪个 ForkJoinPool 上执行

转载 作者:行者123 更新时间:2023-12-02 08:48:46 24 4
gpt4 key购买 nike

我很难理解如何确保我在自己的 ForkjoinPool 中运行 fork 任务,而不是让它使用公共(public)池,我认为这就是发生的情况您没有指明要在哪个线程池中运行。

查看下面的代码,我的 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() 的文档内容说:

Arranges to asynchronously execute this task in the pool the current task is running in [emphasis added], if applicable, or using the ForkJoinPool.commonPool() if not inForkJoinPool().

这是 ForkJoinTask#inForkJoinPool() 的文档:

Returns true if the current thread is a ForkJoinWorkerThread executing as a ForkJoinPool computation

由于您在 ForkJoinPool 中执行原始 FibonacciCalculator,因此在任务内创建的 fork 也会在该同一个池中执行。 p>

关于java - 知道我的 RecursiveTask 将在哪个 ForkJoinPool 上执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60913677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com