JAVA多线程的一点基础问题..

反正我最菜 2016-11-19 10:01:12
最近刚学到JAVA多线程,要实现矩阵乘法,假设有矩阵A,B。要把矩阵A的每一行放到一个进程里面,分别与B进行运算。我遇到的问题是,为什么执行的时候,每个进程都执行了(每个进程执行的时候输出一下,由此可以判断),但是程序还挂在了相乘的类函数里面,好像有传参问题,但是我看不出来。可能认知偏差,请不吝赐教。谢谢...

package one;

public class juZhen {
public static void main(String[] args){
int[][] row = {{1,1,1},{2,2,2},{3,3,3}};
int[][] colnum = {{1,2,3},{1,2,3},{1,2,3}};
int[][] result = new int[3][3];

MyThread m1 = new MyThread(row[0],colnum,1000,"线程a");
MyThread m2 = new MyThread(row[1],colnum,2000,"线程b");
MyThread m3 = new MyThread(row[2],colnum,3000,"线程c");

new Thread(m1).start();
new Thread(m2).start();
new Thread(m3).start();

while(m1.isAlive() == true && m2.isAlive() == true && m3.isAlive() == true)
{
if(m1.isAlive() == false && m2.isAlive() == false && m3.isAlive() == false)
{
result[1] = m2.renum();
result[0] = m1.renum();
result[2] = m3.renum();
for(int i = 0;i < 3;i ++){
for(int j = 0;j < 3;j ++)
{
System.out.print(result[i][j]);
System.out.print("\t");
}
System.out.print("\n");
}
}
break;
}

}
}
class MyThread implements Runnable{
private int[] row;
private int time;
private String name;
private int[][] col;
private int[] result = null;

public MyThread (int[] row,int[][] colnum,int time,String name){
this.row = row;
this.time = time;
this.name = name;
this.col = colnum;
result = new int[colnum.length];
}
public static void sleep(int i) {
// TODO Auto-generated method stub

}
public boolean isAlive() {
// TODO Auto-generated method stub
return false;
}
public void run() {
try{
Thread.sleep(this.time);
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println(this.name);
this.isum(row,col,result);
}
public void isum(int[] row,int[][] colnum,int[] result){
int sum = 0;
for(int i = 0;i < col[i].length;i ++) //列数
{
for(int j = 0;j < col.length;j ++) //行数
{
sum += row[j] * col[j][i];
}
result[i] = sum;
}
}
public int[] renum(){
return this.result;
}
}





...全文
176 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
刘大神仙 2016-11-22
  • 打赏
  • 举报
回复
楼主,你的代码有点问题。 你贴出来的代码第71行:for(int i = 0;i < col[i].length;i ++) //列数 创建的时候是col[3][3],所以最多只能是col[2],col[3]的时候就会下标越界。然后当你的i=3的时候,你会执行判断i<col[3].length,所以这里下标越界了。 还有一个就是,判断线程是否存活的时候,要在线程里面判断,不能在外面。

50,503

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧