gpt4 book ai didi

java - 多个线程处理矩阵的问题

转载 作者:行者123 更新时间:2023-12-02 03:51:53 25 4
gpt4 key购买 nike

我正在尝试通过多线程更改矩阵的主对角线。每个线程都有一个唯一的编号:21、17、16、26、7。但问题是只有一个(公共(public)第一)线程工作并且仅更改矩阵的第一个元素。多线程对我来说是新事物。所以我不知道我该怎么办。

这是来自扩展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();
}
}
}
}
}

这是来自 Matrix 类

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();
}
}

最佳答案

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

关于java - 多个线程处理矩阵的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56776357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com