使用ForkJoin找到最大的数字

时间:2014-04-04 16:42:09

标签: java fork-join forkjoinpool

没有阻止if delay == 2它有效,但不能使用它。

这是ForkJoin的计算:

compute() {

    if(lastElem - firstElem == 1)
        return array[firstElem];

    if(lastElem - firstElem == 2){

        if(array[firstElem] > array[lastElem])
            return array[firstElem];
        else
            return array[lastElem];
    }

    int midElem = (firstElem + lastElem) / 2;

    MyForkJoinTask left = new MyForkJoinTask(array, firstElem, midElem);
    MyForkJoinTask right = new MyForkJoinTask(array, midElem, lastElem);

    left.fork();
    right.fork();

    int leftResult = left.join();
    int rightResult = right.join();

    if(leftResult > rightResult)
        return leftResult;
    else
        return rightResult;


}

这是我的主要方法:

main(String[] args) {
    Random r = new Random();
    for(int i = 0; i < array.length; i++){
        array[i] = r.nextInt();
    }
    MyForkJoinTask root = new MyForkJoinTask(array);
    F_J_POOL.submit(root);
    System.out.println("Result is " + root.join());
}

短错误:

  

线程中的异常&#34; main&#34; java.lang.ArrayIndexOutOfBoundsException

     

at com.bg.fork_join.MainFJ.main(MainFJ.java:24)   引起:java.lang.ArrayIndexOutOfBoundsException     ......还有15个

     

引起:java.lang.ArrayIndexOutOfBoundsException:10000     在com.bg.fork_join.MyForkJoinTask.compute(MyForkJoinTask.java:31)

你能告诉我问题出在哪里吗?

1 个答案:

答案 0 :(得分:1)

我对ForkJoin一无所知,但这只是在一般原则上看起来很可疑:

if(lastElem - firstElem == 2){

    if(array[firstElem] > array[lastElem])
        return array[firstElem];
    else
        return array[lastElem];
}

您的其余代码会显示您正在处理从firstElem(含)到lastElem独占)的子阵列,所以不应该是使用lastElem-1索引?