并行矩阵乘法变量错误java

时间:2015-03-23 21:36:17

标签: java multithreading matrix parallel-processing

我正在按照某人的指导使用我的代码并且到目前为止并且现在卡住了。

他告诉我将算法平行化以在一个单独的线程中计算Matrix C的每个单元格。

我试图像他说的那样做,但是我遇到了一些错误。我不熟悉ExecutorService池,所以我希望我已经正确完成了。

错误发生在第38行,说明非静态变量,这不能从静态上下文中引用。

有人能帮帮我吗?

   import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class Matrix1 {

   public final static int N = 4; //Random size of matrix

    public static void main(String[] args) throws InterruptedException {

    long startTime = System.currentTimeMillis();


        //Create and multiply matrix of random size N.   
        double [][] a = new double [N][N];
        double [][] b = new double [N][N];
        double [][] c = new double [N][N];

        int i,j,k;

        for(i = 0; i < N ; i++)
            for(j = 0; j < N ; j++){
                a[i][j] = i + j;
                b[i][j] = i * j;
            }


                 ExecutorService pool = Executors.newFixedThreadPool(1);
                for(i = 0; i < N; i++)
                     for(j = 0; j < N; j++){
                c[i][j] = 0;
                for(k = 0; k < N; k++)
                    c[i][j] += a[i][k] * b[k][j]; //C matrix calculated from a and B matrices.

            }  
                        pool.submit(new Multi(N,i,j,a,b,c));
                        pool.shutdown();
                        pool.awaitTermination(1, TimeUnit.DAYS);

                 long endTime = System.currentTimeMillis();
                  System.out.println("Calculation completed in " +
                             (endTime - startTime) + " milliseconds");

    }
static class Multi implements Runnable {
    final int N;
    final double [][] a;
    final double [][] b;
    final double [][] c;
    final int i;
    final int j;

        public Multi(int N, int i, int j, double[][] a, double[][] b, double[][] c){
        this.N=N;
        this.i=i;
        this.j=j;
        this.a=a;
        this.b=b;
        this.c=c;
        }


    @Override
    public void run() {
        for(int k = 0; k < N; k++) c[i][j] += a[i][k] * b[k][j];
    }

}

}

1 个答案:

答案 0 :(得分:0)

static关键字添加到Multi

的声明中
static class Multi implements Runnable {