mar*_*nes 4 java locking reentrantlock
我已经在这里搜索过这个错误,但我认为我的代码看起来是正确的:
这是代码的摘录,如果我尝试运行代码,我会得到 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();
}
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
为了你想要的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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1351 次 |
| 最近记录: |