我理解fork/join的概念,但幾乎所有互聯網上的資源都使用Fibonacci作爲示例,但我的場景更復雜。我畫了程序,我有一個例外,在下面的代碼中評論。無法將java.util.concurrent.ForkJoinWorkerThread轉換爲java.lang.Thread-複雜結構
Class Test
{
public static void main(String[] args)
{
ForkJoinPool p= new ForkJoinPool(5);
p.invoke(new Train());
}
}
Class Train extends RecursiveAction
{
public Train(int d, int n)
{
//some intialization
}
public Train()
{
t= new Train[5];
new Vec().run_Vec(t);
}
@Override
protected void compute() {
for(int i= 1; i< 8; i++)
{
// x, and y are predefined
temp[x][y] = some calculation;
}
}
}
class Vec
{
public void run_Vec(Train[] t) {
for (int i = 0; i < 5; i++) {
t[i] = new Train(i*4, i/2);
t[i].fork(); // error java.lang.Thread cannot be cast to java.util.concurrent.ForkJoinWorkerThread
}
for (int i = 0; i < 5; i++) {
t[i].join();
}
}
}
}
[Javadoc中](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ForkJoinTask。在Fork方法中:「此方法只能在ForkJoinPool計算中調用(可以使用inForkJoinPool方法確定)。嘗試在其他上下文中調用會導致異常或錯誤,可能包括ClassCastException。 「你只能從'compute()'中調用的東西運行fork()。如果沒有真正理解你在做什麼,你的Train類應該既不是「作業控制器」,也不是作業的數據對象。 –