gpt4 book ai didi

Java 8 可重入锁和条件导致 IllegalMonitorStateException : current thread is not owner

转载 作者:行者123 更新时间:2023-12-05 02:55:59 24 4
gpt4 key购买 nike

我已经在这里搜索过这个错误,但我认为我的代码片段看起来是正确的:

  1. 我在 try..finally 之外获得了锁
  2. 我在 finally 部分有一个解锁
  3. 我只尝试等待锁内的条件。
  4. 如果当前锁被该线程持有并返回 true,我什至会打印。

这是代码的摘录,如果我尝试运行代码,我会得到 java.lang.IllegalMonitorStateException:当前线程不是所有者。错误在 cond.wait() 方法中。

public void takeARest() {
lock.lock();
try {
while (disembark < totalPassengers) {
System.err.printf("Held by %s%n",lock.isHeldByCurrentThread());
cond.wait();
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}

有什么想法吗?

最佳答案

为此,您需要 Condition.await()

Object.wait() 是一种不同的方法,需要保持对象的监视器(synchornized(cond){} 在调用周围)

所以:

public void takeARest() {
lock.lock();
try {
while (disembark < totalPassengers) {
System.err.printf("Held by %s%n",lock.isHeldByCurrentThread());
cond.await();
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}

关于Java 8 可重入锁和条件导致 IllegalMonitorStateException : current thread is not owner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60906373/

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