java中的并行编程分配

时间:2013-09-16 01:52:21

标签: java parallel-processing

我正忙于并行编程任务,我真的被卡住了。说实话,我不完全确定每种方法的工作原理,但我认为我有一个想法。

我需要对一组连续值求和(并行)。看起来很简单,但每次尝试都会得到0作为答案。我真的不知道为什么。

class SumThreaded extends RecursiveTask<Integer> {
    static int SEQUENTIAL_THRESHOLD = 10000;
    double lo=0.0;
    double hi=0.0;

    long[] arr;

    public SumThreaded(long[] array, double a, double b) {
        arr=array;
        lo=a;
        hi=b;


    }

    public Integer compute() {

        //System.out.println(mid);
        if(hi - lo <= SEQUENTIAL_THRESHOLD) {
            int ans = 0;
            for(int i= (int) lo; i < hi; ++i)
                ans += arr[i];
            return ans;
        }
        else {
            SumThreaded left = new SumThreaded(arr,lo,(hi+lo)/2.0);
            SumThreaded right = new SumThreaded(arr,(hi+lo)/2.0,hi);
            left.fork();
            int rightAns = right.compute();
            int leftAns = left.join();
            return leftAns+rightAns;

        }
    }


    public static void main(String args[]){

        int size = 1000000;
        long [] testArray=new long[size]; 

        for(int i=0;i<size;i++){
            testArray[i]=i+1;
        }

        SumThreaded t = new SumThreaded(testArray,0.0,testArray.length); 
        ForkJoinPool fjPool = new ForkJoinPool();
        int result =fjPool.invoke(t);
        System.out.println(result);

    }
}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您的问题似乎是SumThreaded有两个单独的构造函数,其中只有一个构造了类的字段。当你从long[] array new中的sumArray进食时,你将数组扔掉。您需要选择是否使用intlong s(并且大数组的总和可能需要long),然后确保您的值已设置适当。在compute上调试和设置断点会向您显示此信息。