gpt4 book ai didi

java - 在 Java 中用线程计算斐波那契数列

转载 作者:行者123 更新时间:2023-11-29 06:44:18 24 4
gpt4 key购买 nike

import java.math.BigInteger;
import java.util.concurrent.*;

public class MultiThreadedFib {

private ExecutorService executorService;

public MultiThreadedFib(final int numberOfThreads) {
executorService = Executors.newFixedThreadPool(numberOfThreads);
}

public BigInteger getFibNumberAtIndex(final int index)
throws InterruptedException, ExecutionException {

Future<BigInteger> indexMinusOne = executorService.submit(
new Callable<BigInteger>() {
public BigInteger call()
throws InterruptedException, ExecutionException {
return getNumber(index - 1);
}
});

Future<BigInteger> indexMinusTwo = executorService.submit(
new Callable<BigInteger>() {
public BigInteger call()
throws InterruptedException, ExecutionException {
return getNumber(index - 2);
}
});

return indexMinusOne.get().add(indexMinusTwo.get());
}

public BigInteger getNumber(final int index)
throws InterruptedException, ExecutionException {
if (index == 0 || index == 1)
return BigInteger.valueOf(index);

return getFibNumberAtIndex(index - 1).add(getFibNumberAtIndex(index - 2));
}
}

我打算用 Java 线程计算斐波那契数列以减少计算时间,但答案是错误的,尽管它似乎是真的。另一个问题是在为顶部的 35 号线程启动新线程时发生内存不足异常。请帮我多多问候...

最佳答案

你说你这样做是为了提高性能。有几个问题:

  • 在此使用线程永远不会减少计算时间方式。
  • 如果你关心性能,递归不是一个好主意这个问题。

只要有一个线程、一个简单的循环和两个变量,您将拥有在性能方面难以超越的东西(即不使用 a closed-form solution )。

关于java - 在 Java 中用线程计算斐波那契数列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7673320/

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