gpt4 book ai didi

java.lang.Thread 无法转换为 java.util.concurrent.ForkJoinWorkerThread

转载 作者:搜寻专家 更新时间:2023-10-31 19:47:43 26 4
gpt4 key购买 nike

我正在 Java SE 7 中使用 RecursiveTask 测试 Fibonacci 示例 http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/RecursiveTask.html .

程序如下:

import java.util.concurrent.*;

public class testfuture{
public static void main(String[] args) {
System.out.println("Hello, World");
Fibonacci fib = new Fibonacci(10);
int result = fib.compute();
System.out.println(result);
}
}

class Fibonacci extends RecursiveTask<Integer> {
final int n;
Fibonacci(int n) { this.n = n; }
public Integer compute() {
if (n <= 1)
return n;
Fibonacci f1 = new Fibonacci(n - 1);
f1.fork();
Fibonacci f2 = new Fibonacci(n - 2);
return f2.invoke() + f1.join();
}
}

但是,程序抛出运行时异常

Hello, World
Exception in thread "main" java.lang.ClassCastException: java.lang.Thread cannot be cast to java.util.concurrent.ForkJoinWorkerThread
at java.util.concurrent.ForkJoinTask.fork(Unknown Source)
at Fibonacci.compute(testfuture.java:21)
at testfuture.main(testfuture.java:9)

我用谷歌搜索了这个问题,但无法找出问题所在。

感谢您的帮助。

================

解决方法:

public class testfuture{
public static void main(String[] args) {
System.out.println("Hello, World");
Fibonacci fib = new Fibonacci(10);
ForkJoinPool pool = new ForkJoinPool();
int result = pool.invoke(fib);
//int result = fib.compute(); //run-time exception
System.out.println(result);
}
}

最佳答案

你在滥用 ForkJoinTask。

ForkJoinTasks 的重点是在 ForkJoinPool 内执行它们.
池将在其 ForkJoinWorkerThreads 中为您调用任务的 compute() 方法。

你不应该直接调用compute()

关于java.lang.Thread 无法转换为 java.util.concurrent.ForkJoinWorkerThread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13903429/

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