每次使用 Monitors 运行以下多线程代码时,我都会遇到异常。
http://pastebin.com/jTGR98W9 http://pastebin.com/hKvuDX2d
每次我执行一个条件信号时,我都会得到一个异常,它说它应该是独占的,但是它是独占的,因为它是同步的。还是我做错了什么?
谢谢
每次使用 Monitors 运行以下多线程代码时,我都会遇到异常。
http://pastebin.com/jTGR98W9 http://pastebin.com/hKvuDX2d
每次我执行一个条件信号时,我都会得到一个异常,它说它应该是独占的,但是它是独占的,因为它是同步的。还是我做错了什么?
谢谢
您将旧的内在锁及其信号机制(synchronized
,wait
和notify
)与新的Lock
和Condition
类混合在一起,尽管它们没有任何关系。这是造成混乱的根源,所以我会坚持其中一个(最好是Lock
and Condition
)。
您的问题可能是由于在调用时未持有与条件关联的锁signal()
。用调用lock()
和包围方法unlock():
public void canEat(String name) {
lock.lock();
try {
eaters.add(name);
if (eaters.size() > 0) {
canFeed.signal();
}
} finally {
lock.unlock();
}
}
synchronized
其他方法也需要这样做。