多个线程处理矩阵的问题

我试图通过多线程改变矩阵的主对角线。每个线程都有一个唯一的编号: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();

        }

    }


慕森卡
浏览 85回答 1
1回答

慕哥9229398

乍一看,您锁定了两次 - 一次使用 locker.tryLock(),另一次使用 locker.lock()。删除后者,因为它不需要。此外,“m[i][j] == 0”检查应该在锁定代码中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java