为了账号安全,请及时绑定邮箱和手机立即绑定

多个线程处理矩阵的问题

多个线程处理矩阵的问题

慕森卡 2023-02-23 10:42:31
我试图通过多线程改变矩阵的主对角线。每个线程都有一个唯一的编号:21、17、16、26、7。但问题是只有一个(常见的第一个)线程工作并且只更改矩阵的第一个元素。多线程对我来说是新的。所以我不知道我该怎么办。这是来自扩展 Thread 的类@Override   public void run() {       int[][] m = matrix.getMatrix();       for (int i = 0; i < m.length; i++) {           for (int j = 0; j < m[i].length; j++) {               if ((i == j && m[i][j] == 0) && locker.tryLock()){                   locker.lock();                   matrix.setElement(number, i, j);                   try {                       TimeUnit.MILLISECONDS.sleep(200);                   }catch (InterruptedException e){                       e.printStackTrace();                   }finally {                       locker.unlock();                    }               }           }       }   }这是来自矩阵类public void setElement(int element, int i, int j){    matrix[i][j] = element;}这是来自主类    Thread[] threads = new Thread[numbers.length];    for (int i = 0; i < numbers.length; i++){        Thread thread = new Thread(new NumberSetter(matrix, locker, numbers[i]));        threads[i] = thread;        thread.start();    }    for (int i = 0; i < threads.length; i++) {        try {            threads[i].join();        } catch (InterruptedException e) {            e.printStackTrace();        }    }
查看完整描述

1 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

乍一看,您锁定了两次 - 一次使用 locker.tryLock(),另一次使用 locker.lock()。删除后者,因为它不需要。此外,“m[i][j] == 0”检查应该在锁定代码中。



查看完整回答
反对 回复 2023-02-23
  • 1 回答
  • 0 关注
  • 84 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号