使矩阵乘法在并行java中工作

使矩阵乘法在并行java中工作,java,multithreading,parallel-processing,matrix-multiplication,Java,Multithreading,Parallel Processing,Matrix Multiplication,我根据我被教导创建矩阵乘法的内容创建了这段代码 但是我想对这段代码进行并行处理,这样它就可以在多个线程上工作 有人能帮我吗?我很不确定怎么做 更新: public class ParallelMatrix { public final static int N = 1000; //Random size of matrix public static void main(String[] args) throws InterruptedException { l

我根据我被教导创建矩阵乘法的内容创建了这段代码

但是我想对这段代码进行并行处理,这样它就可以在多个线程上工作

有人能帮我吗?我很不确定怎么做

更新:

   public class ParallelMatrix {

   public final static int N = 1000; //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(10);
                for(i = 0; i < N; i++) {
                    for(j = 0; j < N; j++) {  
                        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];
    }

}

}
公共类并行矩阵{
公共最终静态int N=1000;//矩阵的随机大小
公共静态void main(字符串[]args)引发InterruptedException{
long startTime=System.currentTimeMillis();
//创建并乘以随机大小为N的矩阵。
double[]a=新的double[N][N];
双精度[][]b=新双精度[N][N];
double[]c=新的double[N][N];
int i,j,k;
对于(i=0;i
您可以在单独的线程中计算矩阵C的每个单元格,例如:

class Multi implements Runnable {
    final int N;
    final double [][] a;
    final double [][] b;
    final double [][] c;
    final int i;
    final int j;
    ...
    @Override
    public void run() {
        for(int k = 0; k < N; k++) c[i][j] += a[i][k] * b[k][j];
    }

}

ExecutorService pool = ...;
for (int i = 0;...)
    for (int j = 0;...)
     pool.submit(new Multi(N,i,j,a,b,c));

pool.shutdown();
pool.awaitTermination(1, TimeUnit.DAYS);
类多实现可运行{
最终整数N;
最终双[][]a;
最终双[][]b;
最终双[][]c;
最终int i;
最终int j;
...
@凌驾
公开募捐{
对于(int k=0;k

但是,对整列或整行执行此操作更有意义。

这就是我要做的,如何将代码拆分以添加到其中?如果你能提供代码,我会非常感激的。我已经给你提供了代码。只需像原始代码中那样填写for循环,然后完成构造函数。好的,让我看看我做了多少,我从来没有使用过ExecutorService,所以被弄糊涂了。我没有运气在添加循环时不断出错。错误可能会告诉你出了什么问题。我不会为你写完整的代码。我给了你所有重要的部分,只是感觉差距。如果你有具体的错误,写下来,我可以帮你。