gpt4 book ai didi

java - 嵌套锁上的非法状态异常

转载 作者:行者123 更新时间:2023-12-01 12:20:35 24 4
gpt4 key购买 nike

我遇到了这个异常,但我不明白为什么。

public Test() {
globalLock = new ReentrantLock();
condition = globalLock.newCondition();
}

public void increaseRow(Integer row) {
matrixLock.lock();
try {
while (countIncreasingColumn > 0)
condition.await();
countIncreasingRow++;
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
condition.notifyAll();
matrixLock.unlock();
synchronized (rows.get(row)) {
for (int j = 0; j < column; j++)
matrix[row][j] += 1;
countIncreasingRow--;
}
}
}

线程类:

public void run() {
while (true) {
test.function(new Random().nextInt(10));
}
}

堆栈跟踪:

Exception in thread "Thread-0" waiting thread for test 18
java.lang.IllegalMonitorStateException
at java.lang.Object.notifyAll(Native Method)

我在 notifyAll() 上遇到异常。执行 global.lock() block 的线程是所有者,那么为什么我会得到这个?

最佳答案

您似乎对监视器锁定(Object#notifyAll & synchronized-statements)和条件变量感到困惑>(Condition#signalAll & Condition#await)。

如果等待 Condition#await,则必须使用 Condition#signalAll 而不是 Object#notifyAll

更新:请参阅notifyAll() throws IllegalMonitorStateException解决OP的问题。

关于java - 嵌套锁上的非法状态异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26689550/

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