亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

多個線程處理矩陣的問題

多個線程處理矩陣的問題

慕森卡 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 關注
  • 80 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號