我試圖通過多線程改變矩陣的主對角線。每個線程都有一個唯一的編號: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”檢查應該在鎖定代碼中。
添加回答
舉報
0/150
提交
取消