试图获得多线程矩阵乘法以在Java中工作。给出一个(m×n)矩阵,一个(n×k)矩阵和't'个线程来执行操作。Java多线程矩阵乘法
我的程序在矩阵为正方形时t == n。当以t < n运行时,其他线程不会选取其他操作,并返回部分完成的矩阵。当矩阵不是正方形时,其他线程将返回数组越界错误,并且不会运行。我真的很感激任何建议。这里是相关的代码片段
开始线程。乘数是MatrixMultiplier的一个数组,它是稍后定义的类。
Multiply multiply = new Multiply(cols_mat,rows_mat2);
for (int i = 0; i < threads ; i ++){
multipliers[i] = new MatrixMultiplier(multiply);
}
for (int i = 0; i < threads; i++){
my_threads[i] = new Thread(multipliers[i]);
}
for (int i = 0; i < threads; i++){
my_threads[i].start();
}
for (int i = 0; i < threads ; i++){
my_threads[i].join();
}
乘类定义了矩阵乘法
class Multiply extends MatrixMultiplication{
private int i;
private int j;
private int chance;
public Multiply(int i, int j){
this.i=i;
this.j=j;
chance=0;
}
public synchronized void multiplyMatrix(){
int sum=0;
int a=0;
for(a=0; a<i; a++){
sum = 0;
for (int b = 0; b<j; b++){
sum=sum+mat[chance][b]*mat2[b][a];
}
result[chance][a]=sum;
}
if(chance >=i)
return;
chance++;
}
}
和矩阵乘法
class MatrixMultiplier implements Runnable {
private final Multiply mul;
public MatrixMultiplier(Multiply mul){
this.mul=mul;
}
@Override
public void run(){
mul.multiplyMatrix();
}
}
在哪里我个人认为ISSU e谎言与if(机会> = i)返回;但我还没有找到一种方法将线程的列职责与程序仍在工作。再次,任何意见指向我在正确的方向将不胜感激。谢谢