WorkStealingPool 经典案例
时间: 2024-01-10 14:04:04 浏览: 104
WorkStealingPool 是 Java 中的一种线程池实现,它使用了工作窃取算法来提高多线程任务的执行效率。这种线程池适用于执行计算密集型的任务,其中每个任务的执行时间相对较长。
以下是一个经典的使用 WorkStealingPool 的案例,演示了如何使用它来并行计算斐波那契数列:
```java
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveTask;
public class FibonacciCalculator extends RecursiveTask<Integer> {
private final int n;
public FibonacciCalculator(int n) {
this.n = n;
}
@Override
protected Integer compute() {
if (n <= 1) {
return n;
}
FibonacciCalculator fib1 = new FibonacciCalculator(n - 1);
FibonacciCalculator fib2 = new FibonacciCalculator(n - 2);
invokeAll(fib1, fib2);
return fib1.join() + fib2.join();
}
public static void main(String[] args) {
int n = 10; // 计算斐波那契数列的第 n 项
ForkJoinPool pool = ForkJoinPool.commonPool();
FibonacciCalculator calculator = new FibonacciCalculator(n);
Integer result = pool.invoke(calculator);
System.out.println("Fibonacci number at position " + n + ": " + result);
}
}
```
在上述代码中,我们定义了一个 `FibonacciCalculator` 类,继承自 `RecursiveTask<Integer>`,用于计算斐波那契数列的第 n 项。在 `compute()` 方法中,我们先判断 n 的值是否小于等于 1,如果是,则直接返回 n;否则,创建两个新的 `FibonacciCalculator` 对象来计算 n-1 和 n-2 的斐波那契数,并通过 `invokeAll()` 方法并行执行这两个子任务。最后,将两个子任务的结果相加并返回。
在 `main()` 方法中,我们创建了一个 `ForkJoinPool` 对象,并通过 `invoke()` 方法执行了计算任务。最终,我们输出了斐波那契数列的结果。
通过使用 WorkStealingPool,我们可以充分利用多线程来加速斐波那契数列的计算过程。
希望这个经典案例对你有帮助!如果还有其他问题,请继续提问。
阅读全文