Java 在等待执行条件时获取异常?
每次使用监视器运行以下多线程代码时,我都会遇到异常 http://pastebin.com/hKvuDX2d 每次我执行一个条件信号时,我都会得到一个异常,它说它应该是独占的,但是它是独占的,因为它是同步的。还是我做错了什么Java 在等待执行条件时获取异常?,java,monitors,Java,Monitors,每次使用监视器运行以下多线程代码时,我都会遇到异常 http://pastebin.com/hKvuDX2d 每次我执行一个条件信号时,我都会得到一个异常,它说它应该是独占的,但是它是独占的,因为它是同步的。还是我做错了什么 感谢您将旧的内在锁及其信号机制(同步、等待和通知)与新的锁和条件类混合在一起,尽管它们没有任何关系。这是造成混淆的原因,所以我会坚持使用其中一种(最好是Lock和Condition) 您的问题可能是由于调用signal()时未持有与该条件相关联的锁造成的。通过调用lock
感谢您将旧的内在锁及其信号机制(
同步
、等待
和通知
)与新的锁
和条件
类混合在一起,尽管它们没有任何关系。这是造成混淆的原因,所以我会坚持使用其中一种(最好是Lock
和Condition
)
您的问题可能是由于调用signal()
时未持有与该条件相关联的锁造成的。通过调用lock()
和unlock():
其他
同步的方法也需要这样做。您能告诉我们您得到的确切异常情况以及监视器的代码吗?我看不到您在哪里使用锁,也看不到代码中的同步。
public void canEat(String name) {
lock.lock();
try {
eaters.add(name);
if (eaters.size() > 0) {
canFeed.signal();
}
} finally {
lock.unlock();
}
}