【发布时间】:2018-02-20 16:40:18
【问题描述】:
我的老师让我编写一个乘以 2D 矩阵但使用线程的程序,我在这里找不到使用线程的好处!如何在两个线程之间分配工作?谁能给我解释一下这样做有什么好处,谢谢!
这是我没有线程的代码 其实,一切都是相互依赖的,所以我想不出分工的想法
public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
out.println("Enter your first array rows");
int r1=in.nextInt();
out.println("Enter your first array cloumns");
int c1=in.nextInt();
double[][] m1=new double[r1][c1];
out.println("Enter your second array rows");
int r2=in.nextInt();
out.println("Enter your second array cloumns");
int c2=in.nextInt();
double[][] m2=new double[r2][c2];
if(c1 == r2)
{
out.println("Enter your first matrix numbers");
for(int i=0;i<m1.length;i++)
{
for(int j=0;j<m1[0].length;j++)
{
m1[i][j]=in.nextDouble();
}
}
out.println("Enter your second matrix numbers");
for(int i=0;i<m2.length;i++)
{
for(int j=0;j<m2[0].length;j++)
{
m2[i][j]=in.nextDouble();
}
}
double[][] product=multiply(m1,m2);
for(int i=0; i<product.length;i++)
{
for(int j=0;j<product[0].length;j++)
{
out.print(product[i][j] + " ");
}
out.println();
}
}
else
{
out.println("Sorry you can't multiply these metrecies");
}
}
//A method for normal multiplication without threads
public static double[][] multiply(double[][] a,double[][] b)
{
int aRows=a.length;
int aColumns=a[0].length;
int bColumns=b[0].length;
double[][] c=new double[aRows][bColumns];
for(int i=0;i<aRows;i++)
{
for(int j=0;j<bColumns;j++)
{
for(int k=0;k<aColumns;k++)
{
c[i][j]=c[i][j] + a[i][k] * b[k][j];
}
}
}
return c;
}
【问题讨论】:
-
“2D 指标”是指“2D 矩阵”吗?提示:问问自己不同操作之间有什么依赖关系。如果你有两个 100x100 矩阵要相乘,并且你有一小群人,你会如何划分工作?
-
写出乘法矩阵的逻辑,也许可以更清楚地了解多线程如何提供帮助
-
是的“二维矩阵”,其实我只有2个矩阵,所以每一行代码都依赖于上一行,找不到2个线程分工的方法!跨度>
-
你指的是什么代码?您没有显示任何尝试。
-
@AndrewS 我用代码更新了我的问题,提前谢谢你!
标签: java multithreading matrix multiplication